停止在ssh登录中令人烦恼的会话保持活动消息

20

我试图更改我的MAC电脑上的一些设置,以便让我的连接保持长时间活动。在更改设置之前,当我的电脑处于闲置状态时,它会自动注销并显示“写入失败:管道中断”的警告信息。现在,我更改了这个设置后,每次使用ssh登录终端时都会看到令人烦恼的提示信息。

debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1
debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1
我怎样才能在我的终端(MAC)上去掉这个消息,或者恢复到之前的设置?

1
您可以在SSH命令中加入一个命令行keepalive选项,如下所示:ssh -o "ServerAliveInterval 5" .. - LuvnJesus
11
奇怪,这看起来像是调试信息,你不应该在没有使用 -v 选项运行ssh时看到它。 - Joachim Isaksson
抱歉,即使我通过传递命令“gwsh -2 -v -o“ServerAliveInterval 5”root@192.168.2.104”,我仍然可以在我的终端上看到消息。我的担忧是,我不想让这些调试消息出现在我的终端上,但即使我闲置了10秒钟,我仍然会收到这些消息。 - Swapnil Shailesh Srivastawa
5
是的。我认为我不应该运行ssh -v选项,以停止调试消息,但如果我要跟踪连接过程,则需要冗长输出。 - Swapnil Shailesh Srivastawa
4个回答

13
您正在收到这些消息,是因为您在服务器上设置了 ClientAliveInterval。当连接空闲超过指定时间间隔时,服务器会向客户端发送保持活动的数据包。为了避免这些消息:
  • 在服务器上,将 ClientAliveInterval 增加到足够高的数字 (例如 480 秒),以防止连接超时而不会使日志被洪水般地记录。

  • 在客户端上,将 ServerAliveInterval 设置为小于服务器的 ClientAliveInterval 的数字。这将导致客户端保持连接处于活动状态,而不会触发服务器的保持活动超时。


1
欢迎提供更好的解释,说明我们如何实现这些操作。 - Pedro Alves
你需要修改/etc/ssh/ssh_config/etc/ssh/sshd_config中的配置。更多信息请参阅man ssh_configman sshd_config - dragon

2

请看以下两个地方:

1) 在Mac电脑上的~/.ssh/config文件中 - 可能在那里设置了调试标志

2) 在服务器上,也可能在那里设置了调试标志


2

(其他答案/评论的简单总结):

在Mac的终端中运行,将5替换为小于新消息出现间隔时间的秒数:

echo " ServerAliveInterval 5" >> ~/.ssh/config

在此之前,您可以检查ServerAliveInterval行是否已存在:

cat ~/.ssh/config | grep ServerAliveInterval

(如果看到一行,则进行编辑)。

将在下一次运行ssh时生效。


1
您收到这些消息是因为服务器的 ClientAliveInterval 没有设置为 0(默认值)。

设置一个超时时间间隔(以秒为单位),如果在此期间未从客户端接收到任何数据,sshd(8)将通过加密通道发送一条消息以请求来自客户端的响应。默认值为 0,表示不会向客户端发送这些消息。

解决方案

服务器:将 ClientAliveInterval 设置为 0

最简单的解决方案是在服务器上删除 ClientAliveInterval,它的默认值为 0,不会发送任何消息。

或者,将该值设置为 0。

在哪里进行设置?

通常可以通过编辑服务器的 sshd_config 文件来完成此操作,该文件位于 /etc/ssh/sshd_config 中。更改将在下次启动守护程序时生效。

注意事项

对于托管服务,将ClientAliveInterval设置为0可能是个坏主意。主要是因为它会使主机不必要地运行,并浪费金钱。

客户端:将ServerAliveInterval设置为比服务器的ClientAliveInterval更低的值

如果您无法访问服务器,或者您希望以不同方式配置客户端。您可以将ServerAliveInterval设置为低于ClientAliveInterval的值。然后,ssh客户端将定期发送消息,以重置服务器超时。

在哪里进行配置?

通常通过编辑客户端的ssh_config文件来完成,该文件可能位于~/.ssh/config中。

注意事项

ServerAliveInterval设置为低于ClientAliveInterval,在大多数情况下,与没有设置相同。您的终端不会收到消息。
尽管如此,它允许进行有趣的配置。您可以打开不同的ssh连接,一些连接会timeout,而另一些则不会,当与ClientAliveCountMax结合使用时,服务器会关闭已发送n条消息的连接。
这并不能阻止服务器消息被发送。例如,如果包被丢弃或出现严重延迟导致消息到达较晚,服务器仍将发送消息。

过滤,忽略消息

假定消息发送到stderr。重定向和/或过滤stderr可能是另一种可行的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接