半夏的博客

liangbogopher's blog

iTerm2保持ssh连接不断开

解决 iTerm2 经常断开ssh连接问题。

iTerm2连接ssh一个蛋疼的问题

在mbp笔记本上安装了iTerm2来替换自带的终端,简洁易用,让人一下子就喜欢上,但是使用iTerm2进行ssh连接时,空闲一段时间,连接就会断掉…… 后来因为工作关系,要频繁的连接ssh,实在受不了就转投SecureCRT了,因为SecureCRT有一个空闲时保持连接的设置,还是不错的,但是不习惯SecureCRT的界面和字体,感觉太臃肿了。所以还是想继续使用iTerm2,下面就来介绍如何解决iTerm2短连的问题。

一些主流工具修改ssh连接的配置

通过改变连接工具的一些默认配置,把keepalive的配置打开起来即可:

secureCRT:会话选项 - 终端 - 反空闲 - 发送NO-OP每xxx秒,设置一个非0值。 putty:Connection - Seconds between keepalive(0 to turn off),设置一个非0值。 iTerm2:profiles - sessions - When idle - send ASCII code. XShell:session properties - connection - Keep Alive - Send keep alive message while this session connected. Interval [xxx] sec. 当然,用这个办法的副作用也是有的,比如iTerm2会出现一些并不想输入的字符、vim会有些多余字符插入等等。

如何解决

问题主要是:是服务器端把空闲连接给断开了,或者是mbp的wifi连接会自动断开。。。

1. 通过iTerm2配置参数

profiles -> sessions -> When idle, send ASCII code

这样配置会有一个问题,比如配置ASCII code 为 97, 也就是a,开着iTerm2,过一段时间过来时,屏幕上会有一串aaaaaaaaa,你必须得手动删除,蛋疼。

2. 配置ssh参数

正确的做法是,通过配置 ServerAliveInterval 来实现,在 ~/.ssh/config 中加入: ServerAliveInterval=30

ServerAliveInterval 30 #表示ssh客户端每隔30秒给远程主机发送一个no-op包,no-op是无任何操作的意思,这样远程主机就不会关闭这个SSH会话。

打开vim ~/.ssh/config, 新增:

Host *
    ServerAliveInterval 60

我觉得60秒就好了,而且基本去连的机器都保持,所以配置了*,如果有需要针对某个机器,可以自行配置为需要的serverHostName。

再经过最后的验证,方案二确实为最优选择。

Top