xshell 免费版本只支持 4 个窗口,且用 xshell 打开的终端在某些情况下会失去快捷键支持(例如 command+backspace)。决定在 Linux 上寻找替代方法,偶然在 v2ex 上看到 expect 命令,它的语法和 shell 有些类似。
#!/usr/bin/expect
spawn ssh vince@jump.test.net -p 1024
expect "Password" {send "******\r"}
以上面这段代码为例,当终端出现 “Password” 时,输入密码。对于简单的 ssh 登录大致如此。
显然,如果 ssh 使用了 2FA,以上方法是行不通的。首先我们需要在 Linux 上生成 Auth code。对于 arch,使用 oathtool。
oathtool --totp -b ****************
重头戏是如何在 expect 脚本中将这个命令的输出转为字符串,这花了我大概几个小时的时间。好在功夫不负有心人。
set code [exec oathtool --totp -b ****************]
不多说了,回家了!