先講下背景:
公司電腦需要先登錄堡壘機,然后再從堡壘機跳轉到具體生產機器,每次輸入堡壘機都要通過Authenticator里的2FC的碼做驗證,然后再跳到堡壘機還要再輸入一次賬號密碼,為了方便快速登錄機器,可以制作個腳本實現一鍵登錄,全程只需做兩個操作(1、按F1查找全部機器,2、輸入對應數字選擇機器,然后腳本會自動登錄堡壘機,自動輸入2FC,自動跳轉到對應的ip生產機器并填充賬號密碼!)
1、安裝oath-toolkit , 可以實現動態提取 MFA 碼
沒有brew組件的可以參考Mac安裝brew的四種方法(指定能行)_mac brew-CSDN博客
brew install oath-toolkit
2、下載Google Authenticator的SECKEY的提取工具
下載git開源項目,也可以直接把下面附件解壓到自己目錄
cd ~
git clone https://github.com/scito/extract_otp_secret_keys.git --depth=1
extract_otp_secret_keys-master.zip
3、安裝python提取工具所需環境及組件
本機沒有安裝python和pip命令的先去安裝(參考我之前的文章:創作中心-CSDN)
Mac默認安裝python2.7版本,建議安裝python3和pip3,我安裝的是python3.10.5
cd extract_otp_secret_keys
python -m venv venv
. venv/bin/activatepip install -r requirements-buildenv.txt
pip install -r requirements.txt
4、【重點】 提取 MFA secret key
打開Authenticator APP應用,點擊導出賬號
微信掃描該二維碼活動鏈接內容
新建a.txt并將該一串文本拷貝到a.txt文件內,執行python解析腳本獲取Secret
python3.10 extract_otp_secret_keys.py -p a.txt
快速拷貝驗證碼小技巧
vim ~/.bash_profile
# xxxxx替換為上面截圖的值
alias smCode="echo `oathtool --totp -b xxxxx `| pbcopy"
更新配置文件
source ~/.bash_profile
執行執行smCode命令便可把驗證碼拷貝到剪切板,后面直接ctrl+v便可復制
5、將上一步得到的Secret帶入expect腳本內,執行自動登錄
編輯exp腳本:vim loginJms.exp
#!/usr/bin/expect
# 設置應用的登錄密碼,xxxxxxxx替換為自己的機器
set password "xxxxxxxx"
# xxxxx替換為自己堡壘機賬號
spawn ssh -p 2222 xxxxx@jms.leshuatrade.com
# xxxxx替換為自己堡壘機密碼
expect "*password*" {send "xxxxx\r"}
expect "*Code]:*" {
# 執行oathtool命令,根據第4步拿到的Secret生成MFA密碼,xxxxxxxxxxx替換為第4步的Secret值
set code [exec oathtool --totp -b xxxxxxxxxxx]
send "$code\r"}
# ip替換為你要登錄的密碼
expect "*Opt>*" {send "10.91.31.116\r"}
expect "*D*" {send "2\r"}
expect "*username:*" {send "webapp\r"}
expect "*password:*" {send "$password\r"}
exec sleep 1# expect腳本執行完成,繼續停留在目標服務器內操作
interact
完成后可以通過expect loginJms.exp直接執行,也可以通過shell腳本觸發
6、寫個shell腳本,方便快速執行expect文件
vim login.sh
#!/bin/bashclear
RED='\033[0;31m'
GRN='\033[0;32m'
BLU='\033[0;34m'
NC='\033[0m'
# 獲取執行login.exp路徑
pwdpath=$(cd "$(dirname "$0")";pwd)
# ssh登錄腳本指令, 注意這里要跟腳本命名要一致
sshJms="expect $pwdpath/loginJms.exp"
# menu.sh# 服務器提示目錄,可以根據自己需求修改
echo "--------------------------------------"
echo "選擇你要登錄的服務器"
echo -e "${GRN}===========測試環境===============${NC}"
echo "【1】127.0.0.1"
echo -e "(1) ${GRN}===========預發布環境===============${NC}"
echo "【11】127.0.0.1"
echo -e "(1) ${RED}===========線上環境===============${NC}"
echo "【21】127.0.0.1"
echo "--------------------------------------"
read -p "請選擇服務器:" inputcase ${input} in1)echo -e "${RED}登錄服務器:127.0.0.1"# 執行expect腳本$sshJms# 命令執行結束;;2)# echo -e "${RED}登錄服務器:"# $ssh-webappsleep 1;;3)exit;;
esac
7、設置shell腳本執行快捷鍵
vim ~/.bash_profile
# 添加jms為快捷登錄命令
alias jms='sh ~/sshlogin/sshlogin.sh'
也可以設置F1快速執行shell腳本(本人就這樣設置的),進到終端偏好設置,設置F1為執行shell腳本命令
可以了,已全部完成,后面想登錄堡壘機只需要按F1便能快速執行