加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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您的代码需要进行一些更改,我在这里添加并使其工作.谢谢你!抱歉我的粗鲁.
以下是其他需要它的人的固定代码.您可以将IP放在文本文件中,然后将cat放在servers_addresses中.像servers_addresses =(‘cat ip_list.txt’)
在IP列表中添加IP,如10.10.10.1 10.10.10.2 10.10.10.3

如果需要还有更多例子.
运行命令:

./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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读