[英]Connection Refused On Expect Script SSH
#!/usr/bin/expect
set timeout 30
#Edit for User
set user user
#Edit for Old Password
set old oldpassword
#Edit for New Password
set new newpassword
#get IP List from iplist.txt
set f [open "/iplist.txt"]
set data [read $f]
set wpass [open "/wrongpassword.log" w]
set nossh [open "/nossh.log" w]
set success [open "/successful.log" w]
close $f
foreach line [split $data \n] {
if {$line eq {}} continue
spawn -noecho ssh -q -o "StrictHostKeyChecking=no" $user@$line
expect {
"assword:" {
send "$old\r"
expect {
"assword:" {
close
puts $wpass "$line"
continue
}}
expect {
"*" {
send "user set $user password=$new\r"
expect ">"
send "\r"
expect ">"
send "quit\r"
close
puts $success "$line"
continue
}}}}
expect {
"*" {
close
puts $nossh "$line"
continue
}}
expect eof
}
close $wpass
close $nossh
close $success
當我測試它時,它可以正常工作,但是我將ssh代替而不是阻止它,所以當我拒絕連接或沒有任何托管它的路由時,錯誤就會出現,因為ssh連接已被客戶端關閉。 我試着在“ puts $ nossh” $ line“”之前而不是close一起刪除close。 我還嘗試了交互操作並期望eof,即使無論如何無論如何繼續命令都應該期望eof,但此時仍然會出錯。 如果設備使用不同的密碼,或者列表中沒有設備不可用或ssh已關閉,則可以正常工作。 如果我暫緩連接以使其保持打開狀態但不允許通過流量,它也可以正常工作。 似乎這是SSH連接在到達下一個命令之前已關閉的問題。 只是無法弄清楚如何使它在ssh連接失敗的情況下繼續使用下一個IP。 同樣,當我tarpit時,日志文件也可以正常工作,但是當由於沒有ssh而出錯時,它永遠不會寫入nossh日志文件,因此問題就在那里,只是不知道如何解決。
foreach line [split $data \n] {
if {$line eq {}} continue
spawn -noecho ssh -q -o "StrictHostKeyChecking=no" $user@$line
expect {
"assword:" {
send "$old\r"
expect {
"assword:" {
close
puts $wpass "$line"
continue
}
">" {
send "user set $user password=$new\r"
expect ">"
send "\r"
expect ">"
send "quit\r"
close
puts $success "$line"
continue
}
}
}
eof {
puts $nossh "$line"
continue
}
}
}
close $wpass
close $nossh
close $success
我做錯了幾件事,其中一個是拆分了Expect命令,而我使用了eof錯誤。 另外,如果期望有多個選項,通配符將無法正常工作,無論您以何種順序編寫通配符,通配符都會始終選擇通配符。它現在可以按預期運行。 現在,為其他設備的更復雜腳本執行相同操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.