54

我正在尝试减少 ssh 尝试打开与主机的连接的时间。如果我举个例子ssh www.google.com,提示返回需要很长时间。

我读到了关于使用的信息ssh -o ConnectTimeout=10 www.google.com,但即使这样也需要很长时间。是否有一些我可以修改以减少阻塞时间的尝试?

4

2 回答 2

76

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

# 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 秒
于 2012-04-19T22:18:41.377 回答
7

ConnectTimeout 选项允许您告诉您的 ssh 客户端在返回错误之前您愿意等待连接多长时间。通过将 ConnectTimeout 设置为 1,您实际上是在说“最多尝试 1 秒,如果尚未连接则失败”。

问题是当您按名称连接时,DNS 查找可能需要几秒钟。通过 IP 地址连接要快得多,实际上可能在一秒钟或更短的时间内工作。sinelaw 正在经历的是,每一次通过 DNS 名称连接的尝试都不会在一秒钟内发生。ConnectTimeout 的默认设置遵循 linux 内核连接超时,通常很长。

于 2016-02-11T23:36:22.757 回答