為了保障網絡和數據安全,越來越多公司使用堡壘機。iTerm作為一個好用的終端利器,要實現自動通過堡壘機登錄服務器的方式有多種。下面我就來介紹一種通過expect腳本的方式完成配置。
第一步,進入/usr/local/bin目錄,新建remote.exp文件,文件內容如下:
//remote.exp文件內容
#!/usr/bin/expect
set jumpusr [lindex $argv 0]
set jumphost [lindex $argv 1]
set usr [lindex $argv 2]
set host [lindex $argv 3]
catch {spawn ssh -l $jumpusr $jumphost}
expect "*$jumphost*" { send "ssh -l $usr $host\r" }
expect "*$host*" { send "cd ~\r"; interact }
第二步,執行下面命令,修改文件屬性為可執行
chmod 777 remote.exp
第三步,在iTerm中測試剛才的程序。測試命令格式如下:
// user1為登錄堡壘機的用戶名
// host1為堡壘機IP地址
// user2為登錄目標服務器的用戶名
// host2為目標服務器的IP地址
remote.exp user1 host1 user2 host2
如:remote.exp xiaowang 123.4.56.78 hadoop 132.45.6.89
執行命令后,直接進入目標服務器。如果沒有成功檢查自己是否有堡壘機和目標服務器權限
第四步,配置iTerm
在iTerm中打開 Preferences -> Profiles -> General, 點擊左側底部“+”增加配置。

配置完成后,點擊菜單欄的profiles,即可看到添加的快捷入口,點擊入口即可快速登錄相應的服務器。這種方法默認從new tab打開服務器。

也可點擊快捷點“command+O”打開profiles窗口,選擇入口和打開方式登錄服務器。這種方法可選擇從水平分割、垂直分割、新tab、新窗口方式打開。

后續,如需要增加新的堡壘機和服務器登錄,只需在iTerm的profiles中增加新的配置即可。
注:文中顯示的IP地址均為虛構地址,如有雷同請聯系我修改。
remote.exp文件內容詳解:
#!/usr/bin/expect
set jumpusr [lindex $argv 0]
set jumphost [lindex $argv 1]
set usr [lindex $argv 2]
set host [lindex $argv 3]
catch {spawn ssh -l $jumpusr $jumphost}
expect "*$jumphost*" { send "ssh -l $usr $host\r" }
expect "*$host*" { send "cd ~\r"; interact }
#!/usr/bin/expect, 指定用來執行該腳本的命令程序,這里的expect類似linux下的bash、windows下的cmd。注意:這行必須在第一行。
set jumpusr [lindex $argv 0], 獲取執行腳本時傳入的參數(參數保存在$argv中,從0號開始是參數),並將第0個參數保存到變量jumpusr中。
spawn ssh -l $jumpusr $jumphost, spawn是進入expect環境后才可以執行的expect內部命令,如果沒有裝expect或者直接在默認的SHELL下執行是找不到spawn命令的,所以不要用 “which spawn“之類的命令去找spawn命令。好比windows里的dir就是一個內部命令,這個命令由shell自帶,你無法找到一個dir.com 或 dir.exe 的可執行文件。
spawn主要的功能是給ssh運行進程加個殼,用來傳遞交互指令。
expect "*$jumphost*" { send "ssh -l $usr $host\r" }, 這里的expect也是expect的一個內部命令,這個命令的意思是判斷上次輸出結果里是否包含$jumphost(堡壘機地址)的值的字符串,如果有,執行‘ssh -l $usr $host\r’
expect "*$host*" { send "cd ~\r"; interact }, 判斷上次輸出結果里是否包含$host(目標服務器地址)的值的字符串,如果有,進入服務器用戶目錄,並保持交互動作。
interact, 執行完成后保持交互狀態,把控制權交給控制台,這個時候就可以手工操作了。如果沒有這一句登錄完成后會退出,而不是留在遠程終端上。
expect命令參考鏈接:http://www.cnblogs.com/lixigang/articles/4849527.html
