iTerm2 結合 Linux expect 實現 ssh 自動登錄, 經過跳板機登陸服務器內網功能

痛點

通常狀況下,公司全部的服務器都在內網,公網訪問、管理服務器都要先經過登陸一臺跳板機,而後再由跳板機登陸到相應的服務器進行操做,跳板機與服務器的鏈接都是內網地址。咱們常常看到的現象就是下圖這樣(博主 Mac 自帶的終端作的演示),每次都要經過 ssh 登陸兩次,輸入兩次密碼,密碼也常常輸錯,不勝其煩。shell

這時候咱們就須要用比較好的工具來解決這個問題,可以實現自動登陸,避免時間耗到這種無心義的事情上。我所用到的工具是 iTerm2,iTerm2 是一款很是好用的 Mac 終端工具,具體介紹及基本用法可自行搜索。固然只有iTerm2 還不夠,還要配合 Linux expect 的腳本才能實現自動登陸。服務器

解決方法

expext 腳本

經過跳板機登陸內網服務器,若是隻登錄有外網的服務器,把有關內網的部分刪掉就能夠啦,例如跳板機就是有外網的服務器。ssh

#!/usr/bin/expect
set host [lindex $argv 0]

set TERMSERV 跳板機IP
set USER 跳板機用戶名
set PASSWORD 跳板機密碼
set UATUN 內網服務器用戶名
set UATPWD 內網服務器密碼

# 登陸跳板機
spawn ssh -l $USER $TERMSERV
expect {
        "yes/no" {send "yes\r";exp_continue;}
         "*password:*" { send "$PASSWORD\r" }
        }
# 登陸內網
expect "*跳板機用戶名@*" {send "ssh -l $UATUN $host\r"}
expect {
        "yes/no" {send "yes\r";exp_continue;}
        "*password:*" { send "$UATPWD\r" }
        }
interact

把上面的腳本保存成一個文件,好比 login_inner ,保存在你指定一個文件夾下,我文件的路徑是 /Users/wangyongzhi/.ssh/login_innerwangyongzhi 是我本機用戶名。
別忘了加上可執行權限,方式是 chmod -R a+x /Users/wangyongzhi/.ssh/login_inner
否則等下執行的時候會報
permission denied: /Users/wangyongzhi/.ssh/login_inner
解釋以上 shell 腳本都是什麼意思工具

#!/usr/bin/expect    
注意:這一行必須在腳本的第一行,告訴操做系統腳本里的代碼使用哪個 shell 來執行

set host [lindex $argv 0]  
這一行是設置一個變量的意思,變量名隨便起,儘可能有意義,後面表示的是傳入的參數,0 表示第一個參數,後面會用到。
下面幾個 set 相似,跳板機用戶名密碼通常都同樣,能夠放到這個腳本里面,內網服務器的能夠選擇性的放,也能夠把他們放到參數裏面依次傳進來,本文只拿一個作例子。

spawn ssh -l $USER $TERMSERV
spawn 是 expect 環境的內部命令,它主要的功能是給 ssh 運行進程加個殼,用來傳遞交互指令。

expect {
        "yes/no" {send "yes\r";exp_continue;}
         "*password:*" { send "$PASSWORD\r" }
        }
expect 也是 expect 環境的一個內部命令。判斷上一個指令輸入以後的獲得輸出結果是否包含""雙引號裏的字符串,好比後面的"*password:*",表示上一個輸出結果包含password:
*通配符表示先後能夠是任意字符。
若是是第一次登陸,會出現"yes/no"的字符串,就發送(send)指令"yes\r",而後繼續(exp_continue)。
下面的相似。

interact:執行完成後保持交互狀態,把控制權交給控制檯。
iTerm2 配置

解釋完上面的腳本,下面就要配置 iTerm2 了。
在 preferences->profiles 裏面選左下角的 + 號增長一條,配置以下圖所示,spa

Name: 隨便起,儘可能有意義,你本身知道是哪臺服務器
Tags: 標籤,可寫可不寫,服務器多的話建議設置一個
send text at start: /Users/wangyongzhi/.ssh/login_inner 內網服務器IP
也能夠寫成 ~/.ssh/login_inner 內網服務器IP
內網服務器IP就是上面shell腳本里面的參數,跟前面的文件有空格哈

好了,到此爲止,你就完成了全部的準備工做,這時候再登陸服務器,只須要三步就能夠了操作系統

一、打開 iTerm2 code

二、快捷鍵 Command + o 打開以下圖所示的Profilesblog

三、選中你要進入的服務器名字,就能夠進入啦進程

福利:我這裏有一些電子書的存貨,估計有上萬本吧,各個類型的都有,關注個人公衆號「志哥的成長筆記」(ID:zhige-me),後臺回覆 「閱讀」 獲取。掃描下方二維碼關注。rem

相關文章
相關標籤/搜索