ssh连接需要永远启动,停留在“承诺:网络”


44

使用ssh连接到我的一台服务器需要20秒钟以上的时间才能启动。

这与LAN或WAN条件无关,因为与其自身的连接相同(ssh localhost)。最终建立连接后,与服务器进行交互非常快速。

使用-vvv表示在说了“承诺:网络”后,连接被阻塞。至此,身份验证(此处使用密钥)已经完成,如此处所示:

...
debug1: Authentication succeeded (publickey).
Authenticated to myserver.mydomain.com ([xx.xx.xx.xx]:22).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network

(...在这里停留15到25秒...)

debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug2: client_session2_setup: id 0
...

服务器是Ubuntu 16.04。过去,我已经在另一台服务器(Ubuntu 12.04)上发生过这种情况,神经过敏找到了解决方案,一段时间后问题消失了……

sshd_config是Ubuntu提供的默认设置。

到目前为止,我已经尝试过:

  • 在ssh命令中使用-o GSSAPIAuthentication = no
  • 使用密码代替密钥
  • 在sshd_config中使用UsePrivilegeSeparation no代替yes

1
通常,对我而言,缓慢的SSH连接是DNS问题,在这里可能是这样吗?例如,服务器可能会陷入尝试为客户端IP执行反向DNS并等待超时的问题
Eric Renouf

实际上不是:默认情况下,UseDNS未在sshd_config中定义,并且手册页指出此选项默认为“ no”。
M-Jack,

3
一些谷歌搜索表明,这可能是由于更新systemd而没有重新启动引起的。7月12日,有针对xenial系统更新systemctl restart systemd-logind仅在短时间内为我解决了该问题。
伊万·科兹克

或者,如果您看到的pam_systemd(sshd:session): Failed to create session: Connection timed out是答案中提到的内容,则可能是github.com/systemd/systemd/issues/2925
Ivan Kozik

我来这里是在更新后遇到了这个问题,@ IvanKozik的建议解决了这个问题-即systemctl restart systemd-logind-因此感谢您。
Paul M

Answers:


43

D-Bus和可能是一个问题systemd。如果由于dbus某种原因重新启动了服务,则还需要重新启动systemd-logind

您可以通过打开ssh守护程序日志(在Ubuntu上应该是/var/log/auth.log)并检查是否包含以下几行来检查这是否是问题:

sshd[2721]: pam_systemd(sshd:session): Failed to create session: Connection timed out

如果是,请重新启动systemd-logind服务:

systemctl restart systemd-logind

我在CentOS 7上遇到了同样的问题,因为messagebus重启了(这是D-Bus在CentOS上调用服务的方式)。


我试图重新启动systemd-logind,但过了一会儿它说PolicyKit守护程序已从总线断开连接。我们不再是注册的身份验证代理。由于超过了超时,systemd-logind.service的作业失败。有关详细信息,请参见“ systemctl status systemd-logind.service”和“ journalctl -xe”。
坤仁

@KunRen您可能需要使用重新启动polkit服务systemctl restart polkit
Strahinja Kustudic

16

找到了答案:

在sshd_config文件中将UsePAM从yes更改为no

重新启动ssh服务后,现在可以立即连接到服务器。在此服务器上,PAM链接到ldap,所以这可能是原因,即使在这里我与服务器本身声明的用户(而不是LDAP用户)连接。

好吧,这是绕过此问题的一种方法,而不是真正的解决方案...我以相同的方式设置了其他服务器,但没有出现此问题。

希望这可以帮助某人...


1
将UsePAM更改为no会有其他影响。看到此讨论, 所以我不得不为用户设置密码,因为出现错误,例如因为帐户被锁定,不允许用户nagios
M-Jack

4
这确实不是一个好主意。
雅库耶

1
为什么?? 还有其他选择吗?
M-Jack

8
PAM在现代系统中还用于帐户管理周围的其他事情。与其关闭它,不如最好是研究PAM堆栈中发生的事情以及为什么要花这么长时间。
雅库耶

留下非常常用的未启用 PAM模块以进行SSH访问是一个安全漏洞。从安全的角度来看,限制对诸如SSH之类的关键服务的访问对于任何其他服务也是一个好主意。您想何时将PAM模块与SSH配合使用?例如:当您需要通过winbind将其与活动目录集成时,需要使用带有Google令牌的两因素身份验证等。在其他情况下(使用passwd和shadow时),将其关闭是非常安全的。每个PAM用户都应看到以下内容:cve.mitre.org/cgi-bin/cvekey.cgi?keyword=pam
Michal Sokolowski

10

这是在我的两台Fedora 25服务器上发生的,这是由于SSH登录尝试失败的原因。

(使用GSSAPIAuthentication=noUseDNS=no或重新启动的常见建议systemd-logind没有区别。)

在这些服务器上,/etc/pam.d/postlogin包含:

session     optional      pam_lastlog.so silent noupdate showfailed

的手册页pam_lastlog说明该showfailed选项将:

显示失败的登录尝试次数以及上次btmp尝试失败的日期。

在这些服务器上,/var/log/btmp由于多次失败的登录尝试,文件很大。该btmp日志文件没有被任何旋转。

我安装了该logrotate软件包,以确保将来会轮换日志文件。(在Fedora上,随附的配置可以控制logrotate的旋转/var/log/btmp。)

我还删除了巨大的btmp日志文件。我这样做之后,立即又立即连接到服务器。


这解决了我的问题!谢谢。不错的收获。SSH耗时5-10秒,现在不到眨眼。这是在我已连接公共互联网多年的VM上。现在我想到了,它的防火墙规则可能会稍微好一些。对于其他人,这就是我所做的一切:sudo truncate -s 0 /var/log/btmp-我的体积为2.7G。
卡尔·贝内特'18

2

在我的情况下,原因是崩溃的rsyslogd。我发现这是因为在/ var / log / syslog或/var/log/mail.log中没有更多日志消息

因此service rsyslog restart为我们解决了问题。


我们运行CentOS 6.10的服务器上的原因相同。重新启动rsyslog可以解决该问题。问题是,它还没有死。它正在运行,但显然没有任何用处。
犹他州黑海德'18

1

对我来说,此问题是由大btmp文件(数百MB)引起的。该文件记录登录尝试。当人们试图强行使用您的密码时,此文件可能很大,并且会导致"pledge: network"阶段延迟。

尝试清除日志文件

echo "" > /var/log/btmp

看看是否有帮助。


3
这需要更多的解释。对于初学者来说,您为什么认为这有帮助?
斯文

提示:只需输入即可:> /var/log/btmp
马吕斯

1

对我来说,解决方案正在添加

UseDNS no

/etc/ssh/sshd_config,然后当然是service ssh restart(我们的Debian /杰西服务器上)。没有其他的...

之前

ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 13.440 total
ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 20.990 total
ssh git@git.*****.de true  0.03s user 0.02s system 0% cpu 31.114 total
ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 25.898 total

之后

ssh git@git.*****.de true  0.03s user 0.02s system 5% cpu 0.832 total
ssh git@git.*****.de true  0.03s user 0.01s system 7% cpu 0.523 total
ssh git@git.*****.de true  0.03s user 0.01s system 7% cpu 0.574 total

不,添加UseDNS no是解决完全不同问题的解决方案。
卡巴斯德'18

@kasperd没关系。就我而言,我有非常相似的症状(简短地说:在说了“誓言:网络”之后卡住了),这终于有所帮助,因此,这至少可以解决一个非常相似的问题,并且我相信它会帮助一个或一个其他的。
tamasgal '18

同样,在连接过程中,两个挂起,一个接一个sign_and_send_pubkey,一个更长的挂pledge: network。仅UseDNS no在后续版本中添加service ssh restart可解决此旧版本Ubuntu 14.04.5 LTS安装上的问题。
猎犬

0

我在调试反馈中注意到以下行:

Control socket connect(/var/lib/jenkins/.ssh/USER@HOST:22): Permission denied

这是root:root我在时所拥有的文件jenkins。删除此文件解决了我的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.