当我的连接空闲一段时间后,远程主机会关闭连接。我尝试输入一个新命令,它挂起,然后关闭连接。如何让 ssh 连接保持更长时间的活动状态?
$ ssh [email protected]
Last login: Tue Jan 3 03:09:39 2017 from c-99-99-99-99.hsd1.xx.comcast.net
[root@ip-172-99-99-99 ~]# groups
root bin daemon sys adm disk wheel
[root@ip-172-99-99-99 ~]# users
root root
[root@ip-172-99-99-99 ~]# less /etc/passwd
[root@ip-172-99-99-99 ~]# Connection reset by 52.99.99.99 port 22
远程是 Amazon (AWS) 上的 CentOS,本地是 Cygwin。
答案1
因为您上次登录是从 comcast.net 进行的,所以我猜测您是从home
位于正在执行 NAT 的路由器后面的系统进行连接。执行 NAT 的系统存在的一个问题是知道何时不再需要连接。如果连接完全断开,则没有问题,但如果两台计算机刚刚重新启动,则 NAT 盒不会收到任何信号表明发生了这种情况。因此,您典型的 NAT 盒具有计时器,该计时器会显示“如果一小时内没有流量,那么两个端点显然不会再发送任何内容”,因此会回收 NAT 占用的资源。
所以要做的就是每隔一段时间发送一些流量。假设您openssh
在 cygwin 机器上使用该实现,最简单的方法是启用 TCPKeepAlive。代替
ssh [email protected]
和
ssh -o TCPKeepAlive=true [email protected]
为了长期使用,您最好建立一个~/.ssh/config
文件。
host fred
hostname host.com
user root
TCPKeepAlive=true
然后您就可以说只需ssh fred
使用所需的选项连接到机器即可。
答案2
它正在使用您上次保存的会话 SSH 密钥。
您必须将其删除,然后ssh
为您尝试访问的 IP 地址添加新密钥。
ssh-keygen -f "/home/asagarwal-dev/.ssh/known_hosts" -R 10.0.0.6
上面的命令解决了我的问题(10.0.0.6
我试图ssh
从主机获取的IP地址在哪里)。
答案3
作为 ssh 客户端,请在下面进行配置:
Host *
ServerAliveInterval 60
sudo source ~/.ssh/config
所有远程主机都在此处配置:
/etc/ssh/ssh_config
ServerAliveInterval 60