ssh 超时选项花费的时间比指定的时间长

ssh 超时选项花费的时间比指定的时间长

尝试运行一个脚本,确认本地网络上大量服务器上的日期设置。这些服务器都是本地的,如果运行正常,我预计响应时间小于 1 秒。为了使脚本以有用的速度运行,我希望连接超时尽可能短。

因此我尝试将其作为循环中的主要测试。(IP 地址会变化)

ssh -v -o ConnectTimeout=1 -o ConnectionAttempts=1 10.x.x.x date

对于健康的服务器,这运行良好,但我看到一些框挂起并似乎忽略了超时值。挂起 1 到 2 分钟,而不是我预期的 1 秒。详细输出如下所示。

OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /root/.ssh/config
debug1: Applying options for *10.x.x.x*
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to *10.x.x.x* [*10.x.x.x*] port 22.
debug1: fd 3 clearing O_NONBLOCK
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: identity file /root/.ssh/aws_rsa type -1
debug1: identity file /root/.ssh/aws_rsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP

(这里是其停留一至两分钟的地方)

Connection to *10.x.x.x* timed out while waiting to read

我注意到的一个细节是,存在“某种”连接,但连接失败。服务器运行不正常,没有按预期方式响应。我可以选择其他选项来检测这种情况,并在出现协议问题时更快地失败吗?

答案1

来自手册页ssh_config

连接超时

指定连接到 SSH 服务器时使用的超时时间(以秒为单位),而不是使用默认的系统 TCP 超时时间。此值仅在目标关闭或确实无法访问时使用,而不是在目标拒绝连接时使用。

从这些行中可能不是很清楚,但超时仅用于connect()系统调用,基本上在行之前,

debug1: Connection established.

而不是服务器的所有其他响应。为此,有一个选项ServerAliveIntervalping每隔 X 秒检查一次服务器,以确保服务器在连接后响应(默认情况下关闭)。但是,当您的TCPKeepAlive超时时,您会遇到这种情况,这又是另一个章节。

相关内容