设置SSH连接超时时间

67

我想缩短ssh尝试打开与主机的连接所需的时间。如果我输入例如ssh www.google.com,直到提示返回需要很长时间。

我了解到可以使用ssh -o ConnectTimeout=10 www.google.com,但即使是这样也需要很长时间。也许有一些尝试次数可以修改来减少阻塞时间吗?

我尝试缩短 SSH 连接主机所需的时间。如果我输入例如 `ssh www.google.com`,则需要很长时间才能出现提示符。
我了解到可以改用 `ssh -o ConnectTimeout=10 www.google.com`,但即使是这样也需要很长时间。请问是否有一些尝试次数可以修改以减少阻塞时间?

5
从SSH文档中: "使用此选项可以指定连接SSH服务器时的超时时间(以秒为单位),而不是使用默认的系统TCP超时时间。仅在目标主机无法到达或真正不可用时才使用此值,而不是在拒绝连接时使用。" - Adi
2个回答

95

问题可能是因为ssh正在尝试连接到www.google.com解析到的所有不同IP地址。例如,在我的机器上:

# ssh -v -o ConnectTimeout=1 -o ConnectionAttempts=1 www.google.com
OpenSSH_5.9p1, OpenSSL 0.9.8t 18 Jan 2012
debug1: Connecting to www.google.com [173.194.43.20] port 22.
debug1: connect to address 173.194.43.20 port 22: Connection timed out
debug1: Connecting to www.google.com [173.194.43.19] port 22.
debug1: connect to address 173.194.43.19 port 22: Connection timed out
debug1: Connecting to www.google.com [173.194.43.18] port 22.
debug1: connect to address 173.194.43.18 port 22: Connection timed out
debug1: Connecting to www.google.com [173.194.43.17] port 22.
debug1: connect to address 173.194.43.17 port 22: Connection timed out
debug1: Connecting to www.google.com [173.194.43.16] port 22.
debug1: connect to address 173.194.43.16 port 22: Connection timed out
ssh: connect to host www.google.com port 22: Connection timed out

如果我使用特定的IP运行它,它会返回更快。

编辑:我已经用time计时,结果如下:

  • www.google.com - 5.086秒
  • 173.94.43.16 - 1.054秒

5
想象一下,如果上面的连接真的建立起来了 :) - forumulator

7
ConnectTimeout选项允许您告诉ssh客户端在返回错误之前等待连接的时间长度。将ConnectTimeout设置为1,实际上是在说“尝试最多1秒钟,如果尚未连接,则失败”。问题在于,当您按名称连接时,DNS查找可能需要几秒钟的时间。通过IP地址连接速度更快,而且可能在一秒钟或更短的时间内实际工作。Sinelaw所经历的问题是每次尝试通过DNS名称连接都未能在一秒钟内发生。ConnectTimeout的默认设置遵循Linux内核连接超时,通常相当长。

10
DNS查找花费数秒的情况相当不寻常。 - Jason Martin

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