簡體   English   中英

連接在期望腳本SSH上被拒絕

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM