zoukankan      html  css  js  c++  java
  • 关于Mac下的SSH客户端iterm2等配置

    linux后台开发的同学们晓得,在windows下有xshellsecurecrt这样优秀的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
    "
        }
        "yes/no)?" {
            set yesnoflag 1
            send "yes
    "
        }
        "FATAL" {
            puts "
    CONNECT ERROR: $ip occur FATAL ERROR!!!
    "
            exit 1
        }
        "No route to host" {
            puts "
    CONNECT ERROR: $ip No route to host!!!
    "
            exit 1
        }
    }
    }
    
    if { $yesnoflag == 1 } {
        expect {
            "assword:" {
                send "$passwd
    "
            }
            "yes/no)?" {
                set yesnoflag 2
                send "yes
    "
            }
        }
    }
    
    if { $yesnoflag == 2 } {
        expect {
            "assword:" {
                send "$passwd
    "
            }
        }
    }
    
    puts "
    --------> Connected: $ip, pls enjoy yourself!
    "
    interact

    这样在终端你就可以这样使用,或填入到iterm2的profiles中command即可:

    expect ~/Works/ssh/ssh.exp 127.0.0.1 2222 root lebypasswd

    搞定proxy,profile,还差rzsz。这个比较简单,首先先安装

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

     

  • 相关阅读:
    npm包开发与发布
    mapbox展示动态图标
    axios并行请求
    Vue引入ES5的js库
    git常用操作
    单词倒排
    FT232RL芯片USB转TTL应用
    应用GL823芯片自制的读卡器
    队列图示
    队列
  • 原文地址:https://www.cnblogs.com/leby/p/4557778.html
Copyright © 2011-2022 走看看