Login 仅将Expect脚本从Telnet转换为SSH
任何帮助都将不胜感激。我需要将继承的expect脚本从Telnet转换为仅SSH登录。首先,我是一名路由器人员,继承了我们不久前编写的所有expect脚本模板。到目前为止,只要稍加修改,它们就能顺利运行。我们的客户希望离开Telnet,因此几个月前我们准备了所有Cisco路由器和交换机,以支持Telnet和SSH。到目前为止,我们的脚本还不错。然而,Telnet支持和服务器将很快消失,我需要弄清楚如何重新配置所有脚本模板,使其在仅SSH的环境中工作 下面是一个简单的模板示例,用于获取SHVER输出:Login 仅将Expect脚本从Telnet转换为SSH,login,ssh,expect,cisco,Login,Ssh,Expect,Cisco,任何帮助都将不胜感激。我需要将继承的expect脚本从Telnet转换为仅SSH登录。首先,我是一名路由器人员,继承了我们不久前编写的所有expect脚本模板。到目前为止,只要稍加修改,它们就能顺利运行。我们的客户希望离开Telnet,因此几个月前我们准备了所有Cisco路由器和交换机,以支持Telnet和SSH。到目前为止,我们的脚本还不错。然而,Telnet支持和服务器将很快消失,我需要弄清楚如何重新配置所有脚本模板,使其在仅SSH的环境中工作 下面是一个简单的模板示例,用于获取SHVER输
#!/usr/local/bin/expect -f
#
set force_conservative 0 ;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally
if {$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}
####################################################################
# Info for command line arguments
set argv [ concat "script" $argv ]
set router [ lindex $argv 1 ]
####################################################################
set timeout 15
set send_slow {1 .05}
spawn telnet $router
match_max 100000
expect Username:
sleep .1
send -s -- "user\r"
expect Password:
sleep .1
send -s -- "pass\r"
expect *
send -s -- "\r"
expect *
sleep .2
send -s -- "sh ver\r"
expect *
sleep .2
send -s -- "end\r"
expect *
sleep .2
send -s -- "wr\r"
expect *
sleep .2
send -s -- "exit\r"
expect *
sleep .2
expect eof
而不是:
spawn telnet $router
match_max 100000
expect Username:
sleep .1
send -s -- "user\r"
expect Password:
sleep .1
send -s -- "pass\r"
尝试使用:
spawn ssh -M username@$router
while 1 {
expect {
"no)?" {send "yes\r"}
"sername:" {send "username\r"}
"assword:" {send "password\r"}
">" {break}
"denied" {send_user "Can't login\r"; exit 1}
"refused" {send_user "Connection refused\r"; exit 2}
"failed" {send_user "Host exists. Check ssh_hosts file\r"; exit 3}
timeout {send_user "Timeout problem\r"; exit 4}
}
}