iTerm 2打造ssh完美連接Linux服務器快捷方法
使用MacOS系統的同學都知道iterm2,怎么打造最強終端的方案iTerm2 + Zsh + vim,大家有興趣可以去搜一下,這里主要介紹ssh完美連接Linux服務器方案。
經常和服務器打交道,免不了要遠程連接服務器,怎么使用iterm2連接服務器,網上一搜一大把。但由於iterm2默認不能使用rz指令上傳文件,以及我現在公司遠程登錄測試服務器,采用的方案是需要先通過跳板機登錄。而且往往都會為每一位開發配置一個token,動態的產生一個6位的數字串,用來作為登錄密碼。
網上的一些方法總會不那么完美,在這里做個整理,順便結合我的測試,提供一個我自己實踐出來的完美解決方案。
方案一:expect+配置文件
expect連接的方式有兩種:
第一種 expect腳本文件
1.在一個目錄下創建一個expect腳本文件,建議在自己的.ssh目錄下,為了分類可以有子目錄。
內容如下:
#!/usr/bin/expect -f
set user xxx
set password xxxxx
set host xxxxx
set port 22
set timeout -1
spawn ssh $user@$host
expect "*assword:*"
send "$password\r"
interact
expect eof
2.進入iterm2->preference->profiles
新建一個登錄標簽,內容如下
在send text at start 處輸入指令
expect /Users/xxx/.ssh/vmware/login_xxx
然后在profiles下點擊具體標簽就可以登陸了
第二種 登錄腳本加參數
1.創建登錄腳本 item2login.sh
#!/usr/bin/expect
set timeout 30
spawn ssh -p [lindex $argv 0] [lindex $argv 1]@[lindex $argv 2]
expect {
"(yes/no)?"
{send "yes\n";exp_continue}
"password:"
{send "[lindex $argv 3]\n"}
}
interact
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
2.授予執行權限
chmod +x item2login.sh
3.進入iterm2->preference->profiles
在send text at start 處輸入指令
~/.ssh/item2login.sh 22 用戶 ip 密碼
以上是expect的兩種登錄方式,各有各的好處,登錄服務器,進行相關操作都沒問題,不過當你需要上傳下載文件就會有問題。
首先iterm默認不支持rz相關指令,不過對於如何配置iterm2的lrzsz,網上有具體操作文檔,我這里就不再敘述了
用expect的方式登錄服務器,用rz、sz進行相關操作時,顯示都是沒問題的,可以正常選擇上傳文件或者選擇下載目錄,沒有拋出任何異常但是最后上傳文件也找不到不過文件卻不能成功上傳下載。
而且我在實際使用過程中,還發現這種登錄方式對於scp 的指令支持的不是很好輸入scp 后面接文件,使用tab鍵進行目錄或者文件提示的時候,會報錯,如下圖
方案二: sshpass指令登錄
1.安裝sshpass
具體安裝方法如下:
sudo brew install http://git.io/sshpass.rb
- 1
2.進入iterm2->preference->profiles
創建登錄標簽,在send text at start 處輸入指令
/usr/local/bin/sshpass -o StrictHostKeyChecking=no -p 22 passwrod ssh userName@ip
- 1
這種方式登錄,可以使用rz/sz指令,對於使用賬號密碼登錄服務器的同學已經可以了。但是對於通過跳板機登錄,為每一位開發配置一個token,動態的產生一個6位的數字串,用來作為登錄校驗的方式會有問題,不能出現輸入提示,一直在等待中,就像下圖一樣,我們公司恰巧就是這種情況,對於這種情況我沒有在網上搜到相關的解決方案,不過經過我的嘗試,成功搞出了一種解決方案。
方案三: ssh指令登錄
其實這種方式也是最基本的方式,前幾種方式都是使用的loginshell的方式,其實iterm還有command 的方式讓你輸入登錄指令的,直接ssh登錄就可以,只是這種方式需要手動輸入密碼,對於每次都要輸入動態碼的方式,只能每次都輸入了,如下圖
然后,sshpass的問題就得到解決了
不過對於這種情況,相當於新建一個新建一個shell標簽就得輸入隨機碼,也很不方便,但Mac版的secureCRT支持克隆會話,且直接登錄服務器。對於MAC下iterm2 實現clone session,實現起來也比較簡單。
克隆會話
在~目錄下的.ssh文件夾沖創建一個config文件
如果已經有的話,可以直接把內容添加進入,創建其他文件名是不行的
文件內容輸入:
host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p