調用從shell腳本expectscript:
expect "/copySSHKey.exp <machine> <password> </.ssh/id_rsa.pub path>"
Expect腳本:
#!/usr/bin/expect -f
set machine [lrange $argv 0 0]
set ip [lrange $argv 1 1]
set pass [lrange $argv 2 2]
set path [lrange $argv 3 3]
set timeout -1
spawn ssh-keygen -R ${machine}
spawn ssh-copy-id -i ${path} [email protected]${machine}
match_max 100000
expect {
sleep 10
"password" {
send -- "$pass\r"
send -- "\r"
sleep 1
send_user " SSH key copied to $machine\n"
}
"$machine's" {
send_user " SSH key copied to $machine\n"
}
"password:*" {
send -- "$pass\r"
send -- "\r"
sleep 1
send_user " SSH key copied to $machine\n"
}
"machine" {
sleep 1
send_user " SSH key copied to $machine\n"
}
}
interact
你能澄清你的意思嗎(re:「只有stdout的結尾被記錄,而不是所有的stdout」)?什麼exac tly在你的輸出中,你期望*在你的輸出中有什麼,你如何檢查? (通常,人們會使用'echo $ result'來模糊實際內容)。 –
如果我寫: echo $ result 只顯示最後一行的一部分。 – 77140B
'declare -p result'通常是查看變量實際內容的更好方法 - echo有很多方法可以搞砸。如果有隱藏字符混淆的可能性,'printf'%q \ n'「$ result」'同樣是一個改進。但是,如果您*要*使用'echo',至少應避免忽略引號:'echo「$ result」',而不是'echo $ result'。 –