確認(rèn)系統(tǒng)的expect命令
編寫自動(dòng)登錄腳本我們需要使用expect命令,如果沒有安裝可以通過以下方式安裝
- fedora/centos/readhat
yum|dnf install expect - debian/ubuntu
apt install expect - macos
brew install expect
接下來以macos系統(tǒng)為例進(jìn)行演示,其他系統(tǒng)基本相同
安裝python3與pyotp庫
二次驗(yàn)證的密碼生成方式一般使用基于時(shí)序的算法,我們可以使用python的pyotp庫來生成密碼
首先安裝python3,如果系統(tǒng)已有python3可以跳過,通過命令brew install python3安裝,然后使用pip安裝擴(kuò)展庫pyotp,命令pip3 install pyotp
編寫自動(dòng)登錄腳本
命令vim /usr/local/bin/go-jump-server,將如下內(nèi)容粘貼進(jìn)去,并修改相應(yīng)的區(qū)域
#!/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 "你的跳板機(jī)用戶密碼\n" }
expect "*code:" { send "$otp\n" }
interact
其中第7和第9行的Password:與*code要與你的跳板機(jī)在終端輸出的內(nèi)容相匹配,具體expect命令的使用規(guī)則可以參考expect的相關(guān)教程
最后,對這個(gè)腳本賦予執(zhí)行權(quán)限chmod +x /usr/local/bin/go-jump-server
FAQ
怎么獲取到SECRET字符串?
在你進(jìn)行兩步驗(yàn)證綁定的時(shí)候,一般會(huì)給你一個(gè)二維碼,此二維碼通過支付寶的身份寶或者谷歌的谷歌身份驗(yàn)證器掃描后會(huì)保存并自動(dòng)生成驗(yàn)證碼,這里需要的SECERT即包含在這個(gè)二維碼的內(nèi)容里,可以使用其他任何二維碼掃描軟件(微信不行)進(jìn)行掃描,能夠解析出二維碼的原始內(nèi)容,其內(nèi)容類似如下
otpauth://totp/your_user_name%40your_site_name?secret=XXXXXXXXXXXX