這是我之前問題的延續:未找到生成指令
在參考了一些舊帖子後,我已經編寫了這些命令,如果它是錯誤的,那麼我如何運行 ssh 到遠端伺服器並運行一些命令?
答案1
一種可能性是:建立一個 Expect-syntax 文件,並透過 shell 腳本呼叫它:
#!/bin/bash
expect -f my-file.exp $1 # parameter 1 is the server name
在 my-file.exp 中,您只會有 Expect 指令:
spawn ssh "username@[lindex $argv 0]" # param 1 : server name
# expect now reads the input and does what you tell it on certain patterns
expect {
"password:" { send "my-password\r"; send "do_this_command\r"; send "do_that_command\r"; exp_continue; }
"done" { send_user "exiting"; }
}
此範例登入發送明文密碼的伺服器,然後發送一些命令並繼續。
如果它從輸入中讀取“完成”,則終止,否則它將在幾秒鐘後逾時。
只要執行“exp_continue”,它就會停留在 Expect {} 迴圈內,匹配輸入並執行適當的輸出。
答案2
您也可以在 shell 腳本中使用expect shebang 並編寫expect 腳本。
#!/usr/bin/expect -f
spawn ssh localhost
expect "password: "
send "password\r"
expect "{[#>$]}" #expect several prompts, like #,$ and >
send -- "command.sh\r"
expect "result of command"
etc...