引入
在公司登录机器需要经历:登录跳板机 -> 登录中控机 -> 登录线上机器 3个步骤。重复性的复制粘贴机器的地址非常枯燥,需要一种方法解放双手。考虑到公司使用了动态令牌,每次登录需要输入对应的随机数,因此使用交互式脚本expect来实现。
环境
系统:Mac OS
命令行工具:iterm2
用法
用法可以参照以下3篇文章:
实例
文件命名为test.exp
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #!/usr/bin/expect # 设置超时时间 set timeout 30 # 跳板机用户名 set USER [lindex $argv 0] # 跳板机服务器 set TERMSERV [lindex $argv 1] # 跳板机密码构成为:6位密码+Token动态密码 # 这里输入前6位密码 set PWD [lindex $argv 2] # 需要登录的机器信息 # 这里只要输入线上机器IP set MACHINE [lindex $argv 3] # 输入Token码,用于登录跳板机 send_tty "请输入6位Token动态密码: " expect "\n" { set TOKEN $expect_out(buffer) # 跳板机密码 set PASSWORD "$PWD$TOKEN" } # 登录跳板机 spawn ssh -l $USER $TERMSERV expect "password:" { send "$PASSWORD\r" } # 登录中控机 expect "*waimai*" { send "ssh 10.10.125.9\r" } # 登录机器 expect "*~]*" { send "ssh $MACHINE\r"; interact }
|
使用方法为:
1
| test.exp username serveraddr 123456 10.10.125.11
|