可能重複:
Using expect to pass a password to ssh如何編寫第一個命令後輸入密碼的bash腳本?
我希望有一臺遠程機器和而不是與機器地址和密碼一起使用ssh命令ssh連接,我只想寫一個這個小函數執行ssh命令到機器並在服務器詢問之後進入傳遞。我可以寫ssh部分,但是我怎麼能讓主機要求的時候進入的腳本呢?
可能重複:
Using expect to pass a password to ssh如何編寫第一個命令後輸入密碼的bash腳本?
我希望有一臺遠程機器和而不是與機器地址和密碼一起使用ssh命令ssh連接,我只想寫一個這個小函數執行ssh命令到機器並在服務器詢問之後進入傳遞。我可以寫ssh部分,但是我怎麼能讓主機要求的時候進入的腳本呢?
您可以使用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"
}
}
您可以使用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
就變通辦法,因爲你需要
請勿使用隨機存儲在文本文件中的密碼!改爲使用ssh密鑰。 –
@gniourf_gniourf這隻適用於登錄密碼,而不是來自遠程命令的密碼提示。 – Barmar