1. 程式人生 > >MAC下使用expect先登入跳板機再登入遠端伺服器

MAC下使用expect先登入跳板機再登入遠端伺服器

mac使用ssh遠端連線伺服器沒有儲存密碼的功能,後來使用指令碼寫了一個讀取密碼然後自動登入的功能,用著挺好。但是最近公司為了安全起見,不再讓直接連線測試伺服器,必須先登入跳板機,再通過跳板機登入測試伺服器.....每次要輸兩次密碼,好麻煩的說。
為了不這麼麻煩,在網上搜了一下如何使用指令碼直接登入,結果如下:

//首先MAC要安裝expect( brew install expect),然後,編寫下面的指令碼檔案儲存
#!/usr/bin/expect -f
#設定超時時間
set timeout 3
#這裡設定了跳板機的密碼
set password "你的跳板機密碼"
#連線跳板機
spawn 
ssh 使用者名稱@跳板機IP #如果返回的內容包含*yes/no*,傳送yes expect "*yes/no*" {send "yes\n"} #如果返回的內容包含"*password*",傳送你設定的密碼+\r(PS.這裡的\r一定要加,是回車操作的意思。。。在網上搜了好多沒有說明,一直以為是換行,沒有加這個,結果一直執行不成功) expect "*password:*" {send "$password\r;"} #登入跳板機成功,如果返回的內容包含"*你的跳板機的名稱*",傳送連線測試機的命令 expect "*能匹配跳板機名稱的字串*" {send "ssh 測試伺服器的使用者名稱@測試服務的IP\r
";} #同上面一樣。。。注意interact是留在測試機上,給使用者控制權限,如果不寫會直接退出 expect "*password:*" {send "你的密碼\r";interact} #儲存為 login.sh 執行 expect login.sh #終於不用手輸兩次密碼了.....

在iterm2中設定登入命令為1中的指令碼,用command+o的方式撥出profiles,點選Edit Profiles,按照下圖的方式配好後,雙擊可以圖1中的列表即可自動登入