簡體   English   中英

麻煩遠程運行bash腳本,在本地重定向輸出

[英]trouble running bash script remotely, redirecting output locally

我正在嘗試遠程運行腳本(從bash腳本),但我無法在本地重定向輸出以進行分析。 運行腳本沒有問題:

ssh -n -l "$user" "$host" '/home/user/script.sh $params'

但是我無法捕獲該腳本的輸出。 我嘗試過以下方法:

results=$(ssh -n -l "$user" "$host" '/home/user/script.sh $params')
results=`ssh -n -l "$user" "$host" '/home/user/script.sh $params'`
ssh -n -l "$user" "$host" '/home/user/script.sh $params' | grep "what I'm looking for"
ssh -n -l "$user" "$host" '/home/user/script.sh $params' > results_file

有任何想法嗎?

ssh user@host.com "ls -l" >output

你甚至可以這樣做:

ssh user@host.com "cat foo.tar" | tar xvf --

為簡單起見,使用ssh-keygen生成一個pub / private密鑰對。 將* .pub密鑰復制到遠程主機~~ .ssh / authorized_keys,確保它的chmod為600

那你可以做

ssh -i~ / .ssh / yourkey user@host.com ...等

它也不會要求密碼。 (如果您的密鑰對是無密碼的話)..

你肯定做錯了什么。 我只是測試它,它工作正常。

shadyabhi@archlinux /tmp $ cat echo.sh 
#!/bin/bash
echo "Hello WOrld"$1
shadyabhi@archlinux /tmp $ ssh -n -l shadyabhi 127.0.0.1 '/tmp/echo.sh' foo
Hello WOrldfoo
shadyabhi@archlinux /tmp $ ssh -n -l shadyabhi 127.0.0.1 '/tmp/echo.sh' foo > out
shadyabhi@archlinux /tmp $ cat out
Hello WOrldfoo

好吧,為了讓ssh -n完全正常工作,你需要設置一些東西,這樣你就可以在不需要密碼或密碼的情況下登錄(所以你需要一個本地私鑰,可以使用ssh-agent,或者沒有密碼,並且該公鑰需要位於遠程計算機上的相應authorized_keys文件中。 但如果是這樣的話,你所擁有的應該可以正常工作(它在很多機器上都能正常工作)。

另一個奇怪的可能性是你的遠程script.sh試圖寫入stdin或/ dev / tty而不是stdout / stderr。 在這種情況下,它不適用於ssh -n

實現

ssh -n -l "$user" "$host" '/home/user/script.sh $params' > results_file

按預期正在工作。 它只是在輸出被重定向時才會鎖定(並且腳本需要5-6分鍾才能構建),因此沒有顯示。 謝謝大家。

您的腳本沒有獲得任何參數,因此可能需要很長時間才能運行。 此外,無論出現什么(在stdout上)都可以通過管道傳輸到下一個命令,或者像任何其他本地命令一樣重定向到文件。 考慮以下:

$ cat ~/bin/ascript.sh 
echo one:$1 two:$2 three:$3

$ params="squid whale shark"
$ ssh localhost  'ascript.sh $params'
one: two: three:

$ ssh localhost  "ascript.sh $params"
one:squid two:whale three:shark

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM