關於Mac下的SSH客戶端iterm2等配置


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主題,嗯,目前看一起來一切皆好!

 

 


免責聲明!

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



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