iTerm通過堡壘機自動登錄服務器


為了保障網絡和數據安全,越來越多公司使用堡壘機。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

 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM