谷歌云ssh超时:如何增加会话时间?

18

我在Linux上连接时使用:

gcloud compute --project "xxx" ssh --zone "europe-west-b" "yyy"

如果长时间没有操作约10分钟,我的控制台会冻结或出现错误255

2个回答

31

谷歌云在全局范围内设置了10分钟的会话超时时间,因此您需要使用keepalive来保持连接。尝试添加参数--ssh-flag="-ServerAliveInterval=30" - 任何小于600的值都可以解决这个问题。

有关超时的描述,请参见此处,gcloud ssh的完整用法详细信息请参见此处


2
但是我如何将时间从10分钟增加到2小时? - Vitaly Zdanevich
为什么你需要这样做?如果你使用 keep-alive,你的会话就不会断开。 - IBam
@IBam FYI,应该是--ssh-flag="-ServerAliveInterval=30"。请注意在ServerAliveInterval前面有一个额外的连字符。否则它不会被传递给SSH作为标志,而是作为主机字符串。 - Intermernet
4
@IBam,另外,我还需要编辑/etc/ssh/sshd_config文件并在我的Debian GNU/Linux的gcloud虚拟机实例中设置TCPKeepAlive yes(当然之后要执行service ssh restart),才能使它生效。 - Nuno Henriques
3
适用于我的是 --ssh-flag="-o ServerAliveInterval=5"(OpenSSH_8.0p1)。您必须使用附加选项 -o 标志,因为在 OpenSSH 中,-S 是一个完全不相关的标志,当将其设置为剩余部分 (erverAliveInterval=30) 时并没有产生错误!@IBam 您可能需要编辑答案。 - Adam
显示剩余3条评论

0

它因为KEEP_ALIVE而冻结。在Linux系统中,它不会自动启动。

您应该在Linux客户端或计算引擎实例中运行该命令:

sudo /sbin/sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=5

对于MAC OS客户端:

sudo sysctl -w net.inet.tcp.always_keepalive=1 net.inet.tcp.keepidle=60000 net.inet.tcp.keepinit=60000 net.inet.tcp.keepintvl=60000

对于 Windows 系统,路径为:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\

添加这些设置或更改其值为:

KeepAliveInterval: 1000
KeepAliveTime: 60000
TcpMaxDataRetransmissions: 10

之后,您的客户端控制台将能够保持更长的会话时间!!!


“bigger”有多大?据我了解,它被限制在最多10分钟内。 - Scott Anderson
@ScottAnderson 它将高于默认时间。 - Felipe Pereira

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