iTerm經過堡壘機自動登陸服務器

爲了保障網絡和數據安全,愈來愈多公司使用堡壘機。iTerm做爲一個好用的終端利器,要實現自動經過堡壘機登陸服務器的方式有多種。下面我就來介紹一種經過expect腳本的方式完成配置。html

第一步,進入/usr/local/bin目錄,新建remote.exp文件,文件內容以下:linux

//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 }

第二步,執行下面命令,修改文件屬性爲可執行shell

chmod 777 remote.exp

第三步,在iTerm中測試剛纔的程序。測試命令格式以下:windows

// 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, 點擊左側底部「+」增長配置。
bash

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

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

後續,如須要增長新的堡壘機和服務器登陸,只需在iTerm的profiles中增長新的配置便可。ssh

注:文中顯示的IP地址均爲虛構地址,若有雷同請聯繫我修改。oop

 


 

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

相關文章
相關標籤/搜索