2013-10-09 145 views
0

我通過shell腳本(通過在腳本中放置ssh命令)登錄到遠程機器。 執行ssh命令後,腳本的其餘行將在當前機器上執行,而不是在遠程機器上執行。如何讓其餘的shell腳本行在遠程機器上執行?在遠程機器上執行shell腳本的一部分

比方說這是我的腳本

ssh [email protected] 
ls 
whoami 
---- 

線的SSH之後的其餘部分應當遠程機器上執行,而不是當前的機器。如何實現這一目標?

+0

可能的重複[如何從一個bash腳本內ssh?](http://stackoverflow.com/questions/1895185/how-to-ssh-from-within-a-bash-script) –

回答

0

使用ssh命令與-t選項。例如:

ssh -t myremotehost 'uptime' 
[email protected]'s password: 
10:14:14 up 91 days, 21:20, 5 users, load average: 0.20, 0.35, 0.36 
2

一種可能的解決方案將是在下面的示例中使用heredoc爲:

$ ssh example.foo.com -- <<@@ 
> ls /etc/ 
> cat /etc/passwd 
> @@ 

在第一行中的@@和最後線之間基本上所有將被執行上遠程機器。

$ MYVAR=`cat ~/foo.txt` 
$ ssh example.foo.com -- <<@@ 
> $MYVAR 
> @@ 

或者簡單地執行定界符內同一個動作:

$ ssh example.foo.com -- <<@@ 
> `cat ~/foo.txt` 
> @@ 
+0

可以說,我有一些需要在遠程機器上執行的120-130行。那我該如何將這些行作爲參數傳遞給ssh – Stunner

+0

heredoc仍然可以工作。如果這些行在另一個文件中,它可以被讀入一個變量,變量可以在heredoc內部擴展。查看發出多個命令可能是一個更好的選擇,首先是將文件作爲/ tmp中的腳本推送,然後是執行它。 – zzzirk

1

你也可以通過讀取文件的內容到一個變量使用一個文件的內容你的登錄是無密碼的嗎?

如果是的話,你可以使用管道到遠程機器

就像執行語句:

cat myshellscript.sh | ssh [email protected] -q 
+0

不,它有密碼。 .. – Stunner

+0

我讀過,不可能將密碼作爲參數傳遞給ssh。這是真的嗎?... – Stunner

+0

正在創建一對密鑰嗎?必須將密碼存儲在腳本中通常是一個非常糟糕的主意。 – zzzirk

0

SSH -t用戶@遠程主機 '正常運行時間' 用戶@遠程主機的密碼: 23 :35:33最多2:05,3位用戶,平均負載:0.79,0.52,0.60 連接到遠程關閉。

當您指定-t時,它將打開遠程計算機上的終端並執行該命令。

相關問題