linux后台開發的同學們曉得,在windows下有xshell\securecrt這樣優秀的ssh客戶端軟件。mac下查找了下,有securecrt mac版,網上也有破解的,試用了一段時間,一個問題始終沒有能解決——ssh鏈接偶爾會斷掉。關於這個問題,先說下leby的工作環境吧:我們是不能直接ssh目標主機的,必須用ssh代理中轉,於是搭建了一個HTTP的proxy,這之前在windows下xshell工作很好。在mac的scrt下,總是會隨機掉線,一些超時配置當然是試過的,不能解決問題。
查了下HTTP Proxy日志,發現在windows下xshell是HTTP1.1的,mac的scrt發過來的請求是HTTP1.0。HTTP1.1支持KeepAlive,難道是1.0短鏈接的問題?
好吧,corkscrew 是一個在shell下就可以ssh的proxy軟件,corkscrew是只支持HTTP轉發的,也可以用其它ss5等。通過此連接HTTP Proxy訪問主機,還是HTTP1.0的,corkscrew是開源的,於是修改了源代碼為HTTP1.1和Host 的header設置,結果還是不行。
corkscrew對應的~/.ssh/config配置如下
Host 10.*.*.* 192.*.*.* 172.16.*.* #ProxyCommand corkscrew HTTP代理IP HTTP代理端口 %h %p ~/.corkscrew-auth ProxyCommand /usr/local/bin/corkscrew 【你的IP】 8080 %h %p ServerAliveInterval 120 ConnectTimeout 240
進一步,將HTTP Proxy換做sock5的代理,問題依舊,后來想想,斷鏈掉線是隨機的,應該真的和代理沒有關系。或許真的就是mac下的securecrt存在丟包現象。
leby先用一段時間iterm2吧。
Iterm2自身沒有支持SSH Proxy的客戶端,還是需要使用corkscrew來中轉,corkscrew這部分配置可以復用,即先保證在終端下可以
ssh root@ip連接上遠程主機,這樣,可以在iterm2 profile配置中不使用local shell,而是使用該command登陸。但問題是不能保存密碼,此時leby知道有兩種方案,一個是使用sshpass把密碼明文傳輸,但在第一次登錄時需要保存密鑰。另一個就是使用expect了,expect腳本不就可以避免輸入密碼的么,好了我們准備一個通用的ssh expect腳本:
#!/usr/bin/expect -- if { [llength $argv] < 4 } { puts "Usage: $argv0 ip port user passwd" exit 1 } match_max 600000 set ip [lindex $argv 0] set port [lindex $argv 1] set user [lindex $argv 2] set passwd [lindex $argv 3] set yesnoflag 0 set timeout -1 spawn ssh -q -l$user -p$port $ip expect { "assword:" { send "$passwd\r" } "yes/no)?" { set yesnoflag 1 send "yes\r" } "FATAL" { puts "\nCONNECT ERROR: $ip occur FATAL ERROR!!!\n" exit 1 } "No route to host" { puts "\nCONNECT ERROR: $ip No route to host!!!\n" exit 1 } } } if { $yesnoflag == 1 } { expect { "assword:" { send "$passwd\r" } "yes/no)?" { set yesnoflag 2 send "yes\r" } } } if { $yesnoflag == 2 } { expect { "assword:" { send "$passwd\r" } } } puts "\n--------> Connected: $ip, pls enjoy yourself!\n" interact
這樣在終端你就可以這樣使用,或填入到iterm2的profiles中command即可:
expect ~/Works/ssh/ssh.exp 127.0.0.1 2222 root lebypasswd
搞定proxy,profile,還差rz\sz。這個比較簡單,首先先安裝
brew install lrzsz
或者你可以自己下載lrzsz-0.12.20.tar.gz,編譯安裝。
再次在iterm2的session中,配置觸發器,高級配置的trigger里面:
Regular expression: \*\*B0100 Action: Run Silent Coprocess Parameters: /usr/local/bin/iterm2-send-zmodem.sh Regular expression: \*\*B00000000000000 Action: Run Silent Coprocess Parameters: /usr/local/bin/iterm2-recv-zmodem.sh
請注意,這里觸發器對應的兩個腳本,可以從這里下載:https://github.com/mmastrac/iterm2-zmodem,這兩個腳本網上也很多的。
之后放置在/usr/local/bin/下,此時就可以測試了。如果有問題,請檢查相關的觸發器配置、腳本、rz sz命令行路徑是否正確即可。
關於iterm2,最后再配置上喜歡的solized主題,嗯,目前看一起來一切皆好!