linux – Expect脚本错误发送:Spawn id exp4在执行时未打开
发布时间:2020-12-14 02:28:16 所属栏目:Linux 来源:网络整理
导读:更新: 此处为其他人添加了工作代码 信用额度:https://serverfault.com/users/30957/glenn-jackman @Glenn对不起!只是道歉,我的意思是! 对不起Glenn您的代码需要进行一些更改,我在这里添加并使其工作.谢谢你!抱歉我的粗鲁. 以下是其他需要它的人的固定代
更新:
此处为其他人添加了工作代码 信用额度:https://serverfault.com/users/30957/glenn-jackman @Glenn对不起!只是道歉,我的意思是! 对不起Glenn您的代码需要进行一些更改,我在这里添加并使其工作.谢谢你!抱歉我的粗鲁. 如果需要还有更多例子. ./test.sh "sudo cat /etc/hosts" 运行多个命令 ./test.sh "sudo cat /etc/hosts & /etc/init.d/network status" 搜索和替换 ./test.sh "sed -i -e 's/SEARCH_STRING/REPLACE_STRING/g' /tmp/FileNAME.txt" 完整代码: #!/bin/bash (( $# != 1 )) && { echo >&2 "Usage: $0 "[COMMAND]""; exit 1; } servers_addresses=( 10.10.10.10 192.168.10.1 ) for server_address in ${servers_addresses[@]}; do expect <<EOF set passwds { password1 password2 password3 } set i 0 spawn ssh -t root@$server_address "$*" expect { "Are you sure you want to continue connecting (yes/no)?" { send "yesr"; exp_continue } "s password:" { send "[lindex $passwds $i]r"; incr i; exp_continue } eof } EOF done 我正在尝试运行此脚本,但在修改时出现了不同的错误.这是代码和输出.请帮忙. 使用调试信息更新帖子的末尾 #!/bin/bash (( $# != 1 )) && { echo >&2 "Usage: $0 "[COMMAND]""; exit 1; } servers_addresses=(10.10.10.10 ) for server_address in ${servers_addresses[@]}; do expect <<EOF spawn ssh -t root@$server_address "$*" expect -timeout 2 "Are you sure you want to continue connecting (yes/no)?" { send "yesn" } expect "s password:" { send "Correct_Passwordn" } expect "s password:" { send "Wrong_Password_22222n" } expect "s password:" { send "Wrong_Password_33333n" } expect eof EOF done 输出如下: goldberg188@Test-Server ~$./test.sh "sudo cat /etc/hosts" spawn ssh -t root@10.10.10.10 sudo cat /etc/hosts root@10.10.10.10's password: # Do not remove the following line,or various programs # that require network functionality will fail. 10.10.10.10 TEST-004 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 Connection to 10.10.10.10 closed. expect: spawn id exp4 not open while executing "expect "s password:" { send "Wrong_Password_33333n" }" 如果我像这样修改,那么输出会有所不同 expect "s password:" { send "Wrong_Password_22222n" } expect "s password:" { send "Correct_Passwordn" } expect "s password:" { send "Wrong_Password_33333n" } goldberg188@Test-Server ~$./test.sh "sudo cat /etc/hosts" spawn ssh -t root@10.10.10.10 sudo cat /etc/hosts root@10.10.10.10's password: # Do not remove the following line,or various programs # that require network functionality will fail. 10.10.10.10 TEST-004 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 Connection to 10.10.10.10 closed. expect: spawn id exp4 not open while executing "expect eof" 如果第三行中的密码正确,则根本没有错误.在这一个工作正常. expect "s password:" { send "Wrong_Password_22222n" } expect "s password:" { send "Wrong_Password_22222n" } expect "s password:" { send "Correct_Passwordn" } goldberg188@Test-Server ~$./test.sh "sudo cat /etc/hosts" spawn ssh -t root@10.10.10.10 sudo cat /etc/hosts root@10.10.10.10's password: # Do not remove the following line,or various programs # that require network functionality will fail. 10.10.10.10 TEST-004 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 Connection to 10.10.10.10 closed. 忽略编辑:我知道如何一次运行2个命令. 更新:调试信息 – 修改为 exp_internal 1 expect "s password:" { send "Wrong_Password_22222n" } expect "s password:" { send "Correct_Passwordn" } expect "s password:" { send "Wrong_Password_33333n" } 输出: goldberg188@Test-Server ~$./test.sh "sudo cat /etc/host" spawn ssh -t root@10.10.10.10 sudo cat /etc/host root@10.10.10.10's password: expect: does "root@10.10.10.10's password: " (spawn_id exp4) match glob pattern "s password:"? yes expect: set expect_out(0,string) "s password:" expect: set expect_out(spawn_id) "exp4" expect: set expect_out(buffer) "root@10.10.10.10's password:" send: sending "Wrong_Password_22222n" to { exp4 } expect: does " " (spawn_id exp4) match glob pattern "s password:"? no expect: does " rn" (spawn_id exp4) match glob pattern "s password:"? no Permission denied,please try again. root@10.10.10.10's password: expect: does " rnPermission denied,please try again.rrnroot@10.10.10.10's password: " (spawn_id exp4) match glob pattern "s password:"? yes expect: set expect_out(0,string) "s password:" expect: set expect_out(spawn_id) "exp4" expect: set expect_out(buffer) " rnPermission denied,please try again.rrnroot@10.10.10.10's password:" send: sending "Correct_Passwordn" to { exp4 } expect: does " " (spawn_id exp4) match glob pattern "s password:"? no expect: does " rn" (spawn_id exp4) match glob pattern "s password:"? no cat: /etc/host: No such file or directory Connection to 10.10.10.10 closed. expect: does " rncat: /etc/host: No such file or directoryrrnConnection to 10.10.10.10 closed.rrn" (spawn_id exp4) match glob pattern "s password:"? no expect: read eof expect: set expect_out(spawn_id) "exp4" expect: set expect_out(buffer) " rncat: /etc/host: No such file or directoryrrnConnection to 10.10.10.10 closed.rrn" expect: spawn id exp4 not open while executing "expect eof" 解决方法
假设您没有故意发送错误的密码,请使用exp_continue作为循环结构:
expect <<EOF set passwds {foo bar baz} set i 0 spawn ssh -t root@$server_address "$*" expect { "continue connecting (yes/no)?" { send "yesr"; exp_continue } " password: " { send "[lindex $passwds $i]r"; incr i; exp_continue } eof } EOF (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |