2009-12-13 46 views
43

我想創建一個ssh連接,並在腳本內部在遠程服務器上執行一些操作。如何從bash腳本中ssh?

但是,終端提示我輸入密碼,然後在終端窗口而不是腳本中打開連接。在我退出連接之前,這些命令不會被執行。

我怎樣才能從一個bash腳本ssh中?

回答

53
  1. 如果您想讓密碼提示消失,請使用基於密鑰的身份驗證(described here)。

  2. 運行命令通過SSH遠程你必須給他們作爲參數傳遞給SSH,如下所示:

根@主持人:〜#SSH根@ WWW「PS -ef | grep apache | grep -v grep |廁所-l」

+4

如果我有多個行(只是爲了代碼清晰),我怎麼能傳遞到SSH是什麼? – blong 2012-01-24 20:24:07

+9

使用分號作爲命令分隔符。 'cd/var/www; cp foo bar;' – halfdan 2012-01-24 23:00:55

+0

修復了斷開的鏈接。 – halfdan 2013-05-06 13:00:42

2

您需要做的是爲腳本運行的用戶交換SSH密鑰。看看this tutorial

這樣做後,腳本將運行而不需要輸入密碼。但是,出於安全考慮,您不想爲root用戶執行此操作!

14

如果你想繼續使用的密碼,而不是使用密鑰交換,那麼你可以做到這一點‘指望’,像這樣:

#!/usr/bin/expect -f 
spawn ssh [email protected] 
expect "password:" 
sleep 1 
send "<your password>\r" 
command1 
command2 
commandN 
3

還有另一種方式用做共享連接,例如:某人使用密碼啓動連接,並且每個後續連接都將在相同通道上進行多路複用,從而無需重新驗證。 (和它的也更快)

# ~/.ssh/config 
ControlMaster auto 
ControlPath ~/.ssh/pool/%[email protected]%h 

,那麼你只需要登錄,只要你登錄時,bash腳本將能夠打開SSH連接。

然後,您可以從工作停止腳本,當有人還沒開業就已經通過信道:

ssh ... -o KbdInteractiveAuthentication=no ....