标签 ssh 下的文章

这个问题曾经遇到过,一直没想明白怎么回事,今天看到一篇文章,明白了原理。
SSH 登录太慢可能是 DNS 解析的问题,默认配置下 sshd 初次接受 ssh 客户端连接的时候会自动反向解析客户端 IP 以得到 ssh 客户端的域名或主机名。如果这个时候 DNS 的反向解析不正确,sshd 就会等到 DNS 解析超时后才提供 ssh 连接,这样就造成连接时间过长、ssh 客户端等待的情况,一般为10-30秒左右。有个简单的解决办法就是在 sshd 的配置文件(sshd_config)里取消 sshd 的反向 DNS 解析。

vi /etc/ssh/sshd_config
找到UseDNS,修改为no
UseDNS no
重启SSH服务
/etc/init.d/sshd restart

修改服务端的/etc/ssh/sshd_config配置文件,找到下面两行

#ClientAliveInterval 0
#ClientAliveCountMax 3

去掉注释#,改成

ClientAliveInterval 10
ClientAliveCountMax 10

这两行的意思分别是:
1、参数表示如果服务器连续N秒没有收到来自客户端的数据包,则服务器会向客户端发送一条消息。
2、表示如果服务器发送了N次数据到客户端都没有收到回应时,就会认为连接已经断开,服务器会结束会话、关闭监听的端口。
上述配置表示,如果服务器连续10秒没有收到客户端的数据,就会主动发送数据给客户端。连续发送了10次数据到客户端,都没有收到回复就断开连接。这意味着,网络断开后的最长100秒内,服务器就会关闭ssh会话。
重启sshd服务,systemctl resatrt sshd
经过上述配置后,一个稳定的ssh端口转发连接就建立起来了(已经经过数月的实际测试,断线后会自动重连)。

由于OpenWRT上的ssh可执行文件与普通计算机上的SSH不同,我们需要在OpenWRT上安装完整版的OpenSSH。
1、在OpenWRT上打开终端,输入以下命令:

opkg update
opkg install openssh-client openssh-server

2、然后将OpenSSH添加到PATH环境变量中。在OpenWRT上打开终端,输入以下命令:

echo 'export PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin:/usr/local/sbin"' >> /etc/profile
source /etc/profile

3、重新启动终端并测试SSH连接。在OpenWRT上打开终端,输入以下命令:

ssh -i /path/private_key user@ubuntu_ip_address