确认系统的expect命令
编写自动登录脚本我们需要使用expect命令,如果没有安装可以通过以下方式安装
- fedora/centos/readhat
yum|dnf install expect
- debian/ubuntu
apt install expect
- macos
brew install expect
接下来以macos系统为例进行演示,其他系统基本相同
安装python3与pyotp库
二次验证的密码生成方式一般使用基于时序的算法,我们可以使用python的pyotp库来生成密码
首先安装python3,如果系统已有python3可以跳过,通过命令brew install python3
安装,然后使用pip
安装扩展库pyotp
,命令pip3 install pyotp
编写自动登录脚本
命令vim /usr/local/bin/go-jump-server
,将如下内容粘贴进去,并修改相应的区域
#!/usr/bin/expect
set otp [exec python3 -c "import pyotp; print(pyotp.TOTP('你的SECRET字符串').now(), end='')"]
spawn ssh user@jump-server-host
expect "Password:" { send "你的跳板机用户密码\n" }
expect "*code:" { send "$otp\n" }
interact
其中第7和第9行的Password:
与*code
要与你的跳板机在终端输出的内容相匹配,具体expect命令的使用规则可以参考expect的相关教程
最后,对这个脚本赋予执行权限chmod +x /usr/local/bin/go-jump-server
FAQ
怎么获取到SECRET字符串?
在你进行两步验证绑定的时候,一般会给你一个二维码,此二维码通过支付宝的身份宝或者谷歌的谷歌身份验证器扫描后会保存并自动生成验证码,这里需要的SECERT即包含在这个二维码的内容里,可以使用其他任何二维码扫描软件(微信不行)进行扫描,能够解析出二维码的原始内容,其内容类似如下
otpauth://totp/your_user_name%40your_site_name?secret=XXXXXXXXXXXX