ssh连接永远发起,卡在“服务:networking”

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

这与局域网或广域网条件无关,因为连接到本身需要相同的(ssh localhost)。 连接build立之后,与服务器进行交互是非常快的。

使用-vvv表示在说出“pledge:network”之后连接被卡住了。 此时,身份validation(这里使用密钥)已经完成,如下所示:

... 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 [email protected] debug1: Entering interactive session. debug1: pledge: network 

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

 debug1: client_input_global_request: rtype [email protected] want_reply 0 debug2: callback start debug2: fd 3 setting TCP_NODELAY debug2: client_session2_setup: id 0 ... 

服务器是Ubuntu 16.04。 它已经发生在我以前与另一台服务器(是Ubuntu 12.04),nerver发现解决scheme,并在一段时间后消失的问题…

sshd_config是Ubuntu提供的默认configuration。

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

  • 在ssh命令中使用-o GSSAPIAuthentication = no
  • 使用密码而不是密钥
  • 在sshd_config中使用UsePrivilegeSeparation no而不是yes

这可能是D-Bussystemd 。 如果出于某种原因重新启动了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已经重新启动了(这是在CentOS上调用D-Bus服务的方式)。

find答案:

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

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

那么,这是更好的办法来绕过这个问题,而不是一个真正的解决scheme…我有其他服务器设置相同的方式,没有这个问题。

希望这可以帮助别人…

这发生在我的两个Fedora 25服务器上,并且是由于很多失败的SSHlogin尝试。

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

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

 session optional pam_lastlog.so silent noupdate showfailed 

pam_lastlog的手册页解释了showfailed选项将会:

显示失败的login尝试次数以及btmp上一次失败尝试的date。

在这些服务器上,由于许多失败的login尝试, /var/log/btmp文件是巨大的。 btmp日志文件也没有被旋转。

我安装了logrotate软件包以确保将来日志文件将被旋转。 (在Fedora上, logrotate自带的configuration处理/var/log/btmp的旋转。)

我也删除了巨大的btmp日志文件; 只要我这样做,连接到服务器是瞬间再次。

对于我来说,这个问题是由大量(数百MB)的btmp文件造成的。 该文件logginglogin尝试。 当人们试图暴力破解密码时,这个文件可能很大,导致"pledge: network"阶段的延迟。

尝试清除日志文件

echo "" > /var/log/btmp

看看是否有帮助