我正在尝试运行一个可能需要 1 个多小时的命令,我已经尝试添加
while sleep 300; do echo "1"; done
这样它就不会因为闲置而断开我的连接并且它起作用了。
但有时由于另一个原因它仍然断开连接,它说连接到
*.*.*.*
被远程主机关闭。
我想这只是一个默认的时间限制或者我真的不知道什么?
有没有办法增加那个时间或者让它永远不会断开连接?
如果没有,有没有办法在关闭 ssh 连接后保持该命令运行?
如果您不能更改服务器设置,您应该通过指定频繁的保持活动信号来启动您的 ssh 以允许您的命令完成。例如。
ssh -o ServerAliveInterval=20 [email protected]
应该每 20 秒向服务器发出一个“活动”信号,以便它保持连接活动
对我来说,SSH连接曾经挂断。
以下解决方案对我有用。现在 SSH 连接始终保持活动状态。
来自服务器:
/etc/ssh/sshd_config
$ sudo vi /etc/ssh/sshd_config
ClientAliveInterval 60
$ sudo service sshd restart
来自本地机器/客户端:
/etc/ssh/ssh_config
$ sudo vi /etc/ssh/ssh_config
ServerAliveInterval 60
关于这些参数:
ServerAliveInterval
:客户端在向服务器发送空数据包之前等待的秒数(以保持连接有效)。
ClientAliveInterval
:服务器在向客户端发送空数据包之前等待的秒数(以保持连接有效)。
重要提示:每当对作品进行任何修改时 例如,请确保创建备份。
下面的代码是ServerAliveCountMax,请记住不要保持为0
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();
}