引入

在公司登录机器需要经历:登录跳板机 -> 登录中控机 -> 登录线上机器 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