我试图减少ssh尝试打开与主机的连接的时间。如果我以ssh www.google.com
为例,提示需要很长时间才能返回。
我读到过使用ssh -o ConnectTimeout=10 www.google.com
,但即使这样也需要很长时间。是否可以修改许多尝试以减少阻塞时间?
问题可能是 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 秒
ConnectTimeout 选项允许您告诉 ssh 客户端在返回错误之前愿意等待连接多长时间。通过将 ConnectTimeout 设置为 1,您实际上是在说"最多尝试 1 秒,如果尚未连接,则失败"。
问题是,当您按名称连接时,DNS 查找可能需要几秒钟。通过IP地址连接要快得多,实际上可以在一秒钟或更短的时间内工作。sinelaw正在经历的是,每次通过DNS名称连接的尝试都无法在一秒钟内发生。ConnectTimeout 的默认设置遵循 linux 内核连接超时,这通常很长。