如何防止 ssh 连接关闭?

问题描述 投票:0回答:3

我正在尝试运行一个可能需要 1 个多小时的命令,我已经尝试添加

while sleep 300; do echo "1"; done

这样它就不会因为闲置而断开我的连接并且它起作用了。

但有时由于另一个原因它仍然断开连接,它说连接到

*.*.*.*
被远程主机关闭。

我想这只是一个默认的时间限制或者我真的不知道什么?

有没有办法增加那个时间或者让它永远不会断开连接?

如果没有,有没有办法在关闭 ssh 连接后保持该命令运行?

linux ssh connection
3个回答
9
投票

如果您不能更改服务器设置,您应该通过指定频繁的保持活动信号来启动您的 ssh 以允许您的命令完成。例如。

ssh -o ServerAliveInterval=20 [email protected]

应该每 20 秒向服务器发出一个“活动”信号,以便它保持连接活动


1
投票

对我来说,SSH连接曾经挂断。

以下解决方案对我有用。现在 SSH 连接始终保持活动状态。

来自服务器:


  1. /etc/ssh/sshd_config
  2. 处编辑文件
$ sudo vi /etc/ssh/sshd_config
  1. 在文件中添加或启用这一行。
ClientAliveInterval 60
  1. 保存文件并重启sshd服务
$ sudo service sshd restart

来自本地机器/客户端:


  1. /etc/ssh/ssh_config
  2. 处编辑文件
$ sudo vi /etc/ssh/ssh_config
  1. 将此行添加到文件中。
ServerAliveInterval 60
  1. 保存文件

关于这些参数

ServerAliveInterval
:客户端在向服务器发送空数据包之前等待的秒数(以保持连接有效)。

ClientAliveInterval
:服务器在向客户端发送空数据包之前等待的秒数(以保持连接有效)。

重要提示:每当对作品进行任何修改时 例如,请确保创建备份。


0
投票

下面的代码是ServerAliveCountMax,请记住不要保持为0

https://github.com/openssh/openssh-portable/blob/c8eb3941758615c8284a48fff47872db926da63c/packet.c#L330

static void
server_alive_check(struct ssh *ssh)
{
    int r;

    if (ssh_packet_inc_alive_timeouts(ssh) > options.server_alive_count_max) {
        logit("Timeout, server %s not responding.", host);
        cleanup_exit(255);
    }
    if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 ||
        (r = sshpkt_put_cstring(ssh, "[email protected]")) != 0 ||
        (r = sshpkt_put_u8(ssh, 1)) != 0 ||     /* boolean: want reply */
        (r = sshpkt_send(ssh)) != 0)
        fatal_fr(r, "send packet");
    /* Insert an empty placeholder to maintain ordering */
    client_register_global_confirm(NULL, NULL);
    schedule_server_alive_check();
}
© www.soinside.com 2019 - 2024. All rights reserved.