我正在使用 Ubuntu 14.04.4 服务器,运行 sshd OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8, OpenSSL 1.0.1f 6 Jan 2014
。
该服务器还运行英特尔的 DPDK 框架,用于开发网络软件;这项工作的一部分涉及关闭 Linux 级别的接口以将它们绑定到 DPDK。但是,用于从外部 ssh 的网络接口永远不会打开或关闭,只有其他接口会受到影响。
大多数情况下,ssh 工作正常,但每隔几天就会停止工作一次;ssh 会话中断,尝试通过运行ssh -v
消息停止重新连接Local version string SSH-2.0 ...
(即客户端可以建立连接,是 SSH 部分失败)。
直接连接到机器也不起作用,命令行界面不显示,只有一个空白屏幕。
可以建立 TCP 连接,机器仍然响应 ping。
这非常烦人,因为服务器需要重新启动。
我在服务器上启用了 debug3 日志,当客户端尝试(并失败)连接时的日志/var/log/auth.log
如下所示:
sshd[1688]: debug3: fd 5 is not O_NONBLOCK
sshd[1688]: debug1: Forked child 39149.
sshd[1688]: debug3: send_rexec_state: entering fd = 13 config len 724
sshd[1688]: debug3: ssh_msg_send: type 0
sshd[1688]: debug3: send_rexec_state: done
sshd[39149]: debug3: oom_adjust_restore
sshd[39149]: Set /proc/self/oom_score_adj to 0
sshd[39149]: debug1: rexec start in 5 out 5 newsock 5 pipe 12 sock 13
这个日志看起来和成功连接的日志没什么不同,只是它在那里停止,而成功的连接会继续(下一行是debug1: inetd sockets after dupping: ...
)。
问题似乎发生在接口与 DPDK 绑定或解除绑定时。
这可能是什么原因造成的?有解决方法吗?
答案1
我遇到了 ssh 超时问题,我找到了一种解决方法:
sudo sysctl -w net.ipv4.tcp_keepalive_time=50 \
net.ipv4.tcp_keepalive_intvl=10 \
net.ipv4.tcp_keepalive_probes=5