ssh 连接需要很长时间才能启动,停留在“承诺:网络”

ssh 连接需要很长时间才能启动,停留在“承诺:网络”

使用 ssh 连接到我的其中一台服务器需要 20 多秒的时间。

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

使用 -vvv 显示在说“pledge: network”后连接卡住了。此时,身份验证(此处使用密钥)已经完成,如下所示:

...
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),但一直找不到解决办法,而且一段时间后问题就消失了……

sshd_config 是 Ubuntu 提供的默认配置文件。

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

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

答案1

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 上调用该服务的方式)。

答案2

找到答案:

在 sshd_config 文件中将 UsePAM 从“是”更改为“否”

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

嗯,这更像是一种绕过问题的方法,而不是真正的解决方案......我有其他以相同方式设置的服务器,没有这个问题。

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

答案3

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

GSSAPIAuthentication=no(使用和UseDNS=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日志文件;这样做之后,就可以立即再次连接到服务器。

答案4

对于我(Ubuntu 19.10)来说,问题是:

sshd 配置文件

# Print the message of the day upon successful login.
# This includes a dynamically generated part from /run/motd.dynamic
# and a static (admin-editable) part from /etc/motd.
session    optional     pam_motd.so  motd=/run/motd.dynamic
session    optional     pam_motd.so noupdate

评论 motd 设置让我立即进入。

相关内容