使用 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 设置让我立即进入。