我使用ssh -p8520 username@remote_host
来登录远程服务器。
问题:
当我在工作场所时,总是可以连接并正常工作。不幸的是,当我从家里连接到远程服务器时,终端会在10-15分钟后冻结。
控制台上没有错误/超时报告,但光标不能再移动。
当输入w以检查登录用户时,有一些僵尸登录用户存在,我必须手动杀死它们。
这非常令人烦恼。有谁能帮帮我吗?
SSH守护进程(sshd)在服务器端运行,如果客户端没有发送信息,则会从服务器端关闭连接。为了防止连接丢失,需要指示SSH客户端定期向服务器发送生命信号。
此配置位于文件$HOME/.ssh/config
中,如果文件不存在,请创建该文件(配置文件不能被全球公开读取,因此请在创建文件后运行chmod 600 ~/.ssh/config
)。要将信号每隔四分钟(240秒)发送到远程主机,请将以下内容放入该配置文件中:
Host remotehost
HostName remotehost.com
ServerAliveInterval 240
为了对所有主机启用发送心跳信号,请将以下内容放置在配置文件中:
Host *
ServerAliveInterval 240
ServerAliveInterval
,而服务器使用ClientAliveInterval
。真是一团糟。 - youkaichaoc:/users/youruser/.ssh/config
用于 Windows - Michael Zelensky我希望有一个一次性的解决方案:
ssh -o ServerAliveInterval=60 myname@myhost.com
将其存储在别名中:
alias sshprod='ssh -v -o ServerAliveInterval=60 myname@myhost.com'
现在可以这样连接:
me@MyMachine:~$ sshprod
Host *
和ServerAliveInterval 240
(或者如果您只想在像rockymonkey555的答案中的myname@myhost.com
这样的特定主机名上使用,则指定主机名)?设置别名似乎并没有更容易的方式。 - Lambartalias ssh='ssh -o ServerAliveInterval=60'
- JabbaServerAliveInterval
设置为60
,那很好。然而,如果你可以使用.ssh/config
而不是使用bash别名,那就太傻了。 - Cameron Tacklind对于那些想知道的人,@edward-coast
如果你想为服务器设置保持连接,请将以下内容添加到/etc/ssh/sshd_config
中:
ClientAliveInterval 60
ClientAliveCountMax 2
ClientAliveInterval: 设置一个超时时间,单位为秒,如果在这段时间内没有从客户端接收到数据,sshd(8)会通过加密通道发送一条消息,请求客户端回复。
ClientAliveCountMax: 设置在没有从客户端接收到任何消息的情况下可以发送的客户端存活消息(见下文)的数量。如果在发送客户端存活消息时达到了阈值,则sshd将断开客户端连接并终止会话。
ClientAliveInterval
让服务器检查客户端是否存活,还是让客户端重复使用ServerAliveInterval
“ping”服务器?两者似乎都没有意义。 - droid192ClientAliveInterval 15
和 ClientAliveCountMax 2
,客户端设置了 -o reconnect
,在通过 sshfs 传输大文件时运行良好,没有卡顿。 - allenyllee/etc/ssh/ssh_config
文件中:ServerAliveInterval 60
screen
。也许这是某种超时问题。 - martinscreen
有助于保持程序运行。不幸的是,有时我不得不在远程服务器上工作:( - Haifeng Zhangscreen
就可以解决连接丢失的问题吗?不需要screen -S screenName
吗?我一直都是使用带有-S
和-r
的 screen。 - Haifeng Zhang