2012-12-10 66 views
1

可能重複:
Using expect to pass a password to ssh如何編寫第一個命令後輸入密碼的bash腳本?

我希望有一臺遠程機器和而不是與機器地址和密碼一起使用ssh命令ssh連接,我只想寫一個這個小函數執行ssh命令到機器並在服務器詢問之後進入傳遞。我可以寫ssh部分,但是我怎麼能讓主機要求的時候進入的腳本呢?

+1

請勿使用隨機存儲在文本文件中的密碼!改爲使用ssh密鑰。 –

+0

@gniourf_gniourf這隻適用於登錄密碼,而不是來自遠程命令的密碼提示。 – Barmar

回答

3

您可以使用expect腳本。您可以從cmd行傳遞參數。我寫的示例代碼:

#!/usr/bin/expect 

set timeout 100 
set host [lindex $argv 0] 
set username [lindex $argv 1] 
set password [lindex $argv 2] 
set command [lindex $argv 3] 

spawn ssh [email protected]$host $command 
#puts $command 
expect { 
    "(yes/no)?" 
     { 
      send "yes\n" 
      expect "*assword:" { send "$password\n"} 
     } 
    "*assword:" 
     { 
      send "$password\n" 
     } 
    } 
1

您可以使用Expect tool
這是你需要的東西:

編輯

#!/usr/bin/expect 
set timeout 60 
set user "yourName" 
set machine "nameOfYourMachine" 
set password "yourPassword" 
set command "command that you want execute via ssh" 
spawn ssh [email protected]$machine 
while {1} { 
expect { 
     eof       {break} 
     "The authenticity of host" {send "yes\r"} 
     "password:"     {send "$password\r"} 
     "*\]"      {send "exit\r"} 
     "bash"      {send "$command"} 
} 
} 
wait 
close $spawn_id 

就變通辦法,因爲你需要

+0

產卵不起作用 – erogol

+0

@Erogol whrite#在/ usr/bin中/期待作爲一線 – Arseniy

+0

仍然不工作,並獲得重生!找不到命令 而{1} {:找不到命令 無法讀取文件「{」 :沒有這樣的文件或目錄 找不到命令'eof',是否意指: 命令'eog'from package'eog'(main) 命令'eox'from package'keyboards-rg'(universe) eof:command找不到 * ssword :: command not found – erogol

相關問題