Bash 脚本 - Expect 不发送以 $! 结尾的密码。还需要改进以报告连接超时

Bash 脚本 - Expect 不发送以 $! 结尾的密码。还需要改进以报告连接超时

更新:密码问题已修复,连接超时消息也已修复。

\在工作之前添加$!。例如:*password\$!

set passwds { *password\$! @tempP@ss %Test4%}

对于连接超时,在“s password:”行后添加以下代码

timeout { puts stdout "$server_address : connection timed out"}

此脚本不会报告连接是否超时。它只是跳转到下一个 IP。如果它报告连接超时,那么我可以轻松 grep 并找到所有 IP 并执行某些操作。

我希望这部分代码能够报告连接失败的情况

ssh -t root@$server_address "$*"

此外,此脚本无法发送以 $! 结尾的密码。密码是 *password$!,但它将其发送为 *password

期望调试exp_internal 1

expect: set expect_out(0,string) "\r\nPermission denied, please try again.\r\r\[email protected]'s password: "
expect: set expect_out(spawn_id) "exp4"
expect: set expect_out(buffer) "\r\nPermission denied, please try again.\r\r\[email protected]'s password: "
send: sending "*password\r" to { exp4 }
expect: continuing expect

以下是代码:

#!/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
set passwds { *password$! @tempP@ss %Test4%}
set i 0
spawn ssh -t root@$server_address "$*"
expect {
    "Are you sure you want to continue connecting (yes/no)?" { send "yes\r"; exp_continue }
    "s password:" { send "[lindex \$passwords_ssh \$x]\r"; incr x; exp_continue }
    eof
}
EOF
done

答案1

如果在双引号中使用,变量就会扩展"",并且 Bash 将以 开头的所有内容视为$变量。

请使用单引号''

ssh如果发生错误,将以退出代码 <> 0 结束。这存储在$?

相关内容