If statement 如果密码为其他用户/密码,则需要脚本

If statement 如果密码为其他用户/密码,则需要脚本,if-statement,telnet,expect,If Statement,Telnet,Expect,我的情况是,我必须对一些交换机进行配置。 交换机上的身份验证是通过密码和用户/密码进行的 我似乎找不到一个expect脚本,该脚本只使用密码检查登录,如果失败,则尝试使用用户和密码 应该是这样的: 远程登录到主机 如果密码正确,则执行备份命令 否则发送用户和密码并执行备份命令 #!/usr/bin/expect spawn telnet 172.21.146.22 sleep 1 send "\x19" sleep 1 expect { "Password:" { send "p

我的情况是,我必须对一些交换机进行配置。 交换机上的身份验证是通过密码和用户/密码进行的

我似乎找不到一个expect脚本,该脚本只使用密码检查登录,如果失败,则尝试使用用户和密码

应该是这样的: 远程登录到主机 如果密码正确,则执行备份命令 否则发送用户和密码并执行备份命令

#!/usr/bin/expect
spawn telnet 172.21.146.22
sleep 1
send "\x19"
sleep 1
expect
{
"Password:" {
        send "pass\r"
        interact
            }
"Username:" {
        send "admin\r"
        sleep 1
        expect "Password:"
        send "pass\r"
        interact
            }
}

这里需要的是
exp\u continue
,它基本上支持expect语句中的“循环”

#!/usr/bin/expect
spawn telnet 172.21.146.22
sleep 1
send "\x19"
sleep 1
expect {                # <-- open braces *must* be on same line as command.
    "Password:" {
        send "pass\r"
        exp_continue
    }
    "Username:" {
        send "admin\r"
        exp_continue
    }
    timeout {
        error "timed out before successful login"
    }
    "some_string_you_see_when_you_have_logged_in_successfully"
}
send "your backup command\r"
#/usr/bin/expect
繁殖telnet 172.21.146.22
睡眠1
发送“\x19”
睡眠1

expect{{{}这是我的脚本的外观:{usr/bin/expect spawn telnet主机sleep 1 expect“#”sleep 1 send”\x19“sleep 1 expect”*“sleep 1 send”\t\t“sleep 1 expect{”Password:{send”pass\r“interact}”Username:{send”admin\r“sleep 1 expect”pass:“send”pass\r”interact}编辑您的问题以将代码放在那里。您无法在注释中正确设置代码格式。另外,向我们展示手动登录的外观。从终端剪切并粘贴这是ogin如何查找带有密码的设备:这是使用用户名和密码的设备的登录:可能将提示更改为“输入密码:”和“输入用户名”-界面使用类似于curses库的东西来呈现屏幕,因此您可能需要
sleep 1
来给光标进入输入字段的时间。此外,选择与“Ethernet”不同的东西来表示成功登录:该词出现在两个登录屏幕上。