我看到SSH登录延迟。具体来说,在两个地方,我看到了从瞬时到几秒的延迟范围。并具有shell加载

现在,特别是我仅在此处查看ssh详细信息。显然,网络延迟,所涉及的硬件和OS的速度,复杂的登录脚本等都可能导致延迟。对于上下文,我使用大量Ubuntu和CentOS和MacOS X作为客户端系统,使用大量Linux发行版和一些Solaris主机。几乎所有时间,ssh服务器配置都与操作系统的默认设置保持不变。

我应该对哪些ssh服务器配置感兴趣?是否有可以调整的OS /内核参数?登录shell的技巧?等吗?

评论

您在使用本地帐户吗? -有时我发现pam身份验证可能会增加使用ssh登录的延迟

通常是本地帐户。有时是NIS。

#1 楼

尝试在UseDNSno中将/etc/sshd_config设置为/etc/ssh/sshd_config

评论


+1是ssh登录时最常见的延迟原因

–matthias krull
10年7月22日在9:22



“ Solaris 11注意:我在Solaris 11上尝试了UseDNS no设置,它破坏了服务启动。服务不完全友好地响应。YMMV和其他* Nix变体,但是UseDNS no似乎不是Solaris 11中的有效选项。” -Keith Hoffman评论

– Sathyajith Bhat♦
2012年1月11日7:21

我对使用IP地址(家庭局域网)登录时表示怀疑,但是此解决方案解决了我的问题。为了Google的缘故,尽管延迟是在紧随其后发生的,但与“ key:/home/mylogin/.ssh/id_ecdsa((nil))”消息(运行ssh -vvv时)无关。

–Skippy le Grand Gourou
2014年5月19日上午10:42

+1使其显式,文件/ etc / ssh / sshd_config!我在/ etc / sshd_config中添加,发现完全没有区别!

– vyom
2014年11月20日,9:22

@SkippyleGrandGourou:一些Solaris版本使用的是经过修改的OpenSSH,称为SunSSH,它具有一些令人讨厌的不兼容性。 Solaris 11.3重新添加了OpenSSH,SunSSH最终将被删除...

– Gert van den Berg
16年1月4日在13:01

#2 楼

当我在性能类似的慢服务器上运行ssh -vvv时,我发现这里挂起了一个地方:正常。这是我在服务器上的/etc/ssh/ssh_config中拥有的内容:只需将/etc/ssh/ssh_config添加到服务器上的GSSAPIAuthentication no并重新启动服务即可。

评论


配置winbind / ad登录后,我发现RHEL5服务器就是这种情况。

–乍得
13年2月22日在20:57

这对我在Ubuntu 14.04服务器上有效。

–耿鹏和
16年8月3日在14:11

对于CentOS 7,需要在/ etc / ssh / sshd_config文件中同时设置GSSAPIAuthentication no和UseDNS no。

– Sunry
18-2-22在2:34



#3 楼

对我来说,罪魁祸首是IPv6分辨率,它正在超时。 (我猜我主机提供商的DNS设置错误。)我通过执行ssh -v发现了这一点,该错误表明挂了哪个步骤。 br /> ssh

评论


我怀疑随着时间的流逝,越来越多的事情(很糟糕)逐渐适应IPV6,我们中越来越多的人会看到这种情况。谢谢!

–圣人
16-2-3在23:13

...并且,如果没有确认此问题的调试消息,此答案特别无用。

– E.P.
16年4月29日在12:21

根据我的经验,当SSH在双栈接口上侦听时,这是一个非常常见的问题,这是我登录时首先要检查的内容,但是所花费的时间比预期的多。

– Mogget
16 Dec 17 '21:44

我们是否有可能修复IPv6而不是默认使用IPv4?

–msrd0
18-09-26在16:15

这可能是UseDNS无应答有效的原因。使用-vvv仅显示它在debug2处暂停:解析“ thing.net.au”端口22没有错误,但是对于-4则不会发生,表明这是DNS IPv6问题。

– PMC
19 Mar 7 '19在23:27



#4 楼

使用systemd时,登录可能会在某些升级后与登录的dbus通信挂起,然后需要重新启动logind。 suse列表

评论


哦,哇,这是罪魁祸首!谢谢一群!

– mahatmanich
17 Mar 4 '17 at 22:29

我也是。花了一段时间先排除所有可能的DNS和SSH问题。注意:如果该问题也适用于慢速sudo,请首先尝试执行此操作。

–迈克尔
17年8月30日在10:36

我刚刚完成了一些从RHEL6到RHEL7的就地升级,并注意到了这个问题。这个答案也解决了我的问题。

–user53029
19年7月1日在20:03

非常感谢,它就像是一种魅力。

–波南
19-10-14在12:27

对于Devuan,我终于到达那里之后,通过以root用户身份重新启动服务elogind重新解决了我的慢速auth(su和ssh)问题。尝试sudo -i。

– bgStack15
20 Nov 29 '21:37

#5 楼

您始终可以使用ssh选项启动-v,该选项显示当前正在执行的操作。

$ ssh -v you@host


使用您提供的信息,我只能建议一些客户端配置:


由于您写道您是手动输入密码,所以我建议您尽可能使用公钥身份验证。
您还可以使用-x禁用X转发和使用-a禁用身份验证转发(默认情况下可能已禁用)。如果客户端需要启动ssh命令的X服务器(例如,在OS X下),则特别禁用X转发可以大大提高速度。您会在何时何地体验到。

评论


有关详细程度的好提示,也可以通过增加v来增加它。最多3个IIRC。

– vtest
2010-09-22 18:51

#6 楼

关于2.点,这是一个不需要修改服务器也不要求具有root /管理特权的答案。

您需要编辑“ user ssh_config”文件,该文件是:

vi $HOME/.ssh/config


(注意:如果目录$ HOME / .ssh不存在,则必须创建该目录)

并添加:

Host *
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes


如果需要,您可以在每个主机的基础上这样做:)示例: IP地址与您的服务器IP相匹配。一个很酷的优点是,现在ssh将为该服务器提供自动完成功能。因此,您可以键入ssh lin + Tab,它将自动完成至ssh linux-srv

#7 楼

检查服务器上的/etc/resolv.conf,以确保此文件中列出的DNS服务器可以正常工作,并删除所有无效的DNS。

有时它非常有帮助。

#8 楼

除了已经提到的DNS问题外,如果将ssh放入具有许多NFS挂载的服务器中,则由于quota命令检查未使用noquota挂载的所有文件系统上的使用情况/配额,因此密码和提示之间可能会有延迟。在Solaris系统上,可以在默认的/etc/profile中看到它,并通过运行touch $HOME/.hushlogin跳过它。

#9 楼

这可能仅特定于Debian / Ubuntu OpenSSH,其中包括由Debian软件包维护者之一编写的user-group-modes.patch。如果只有一个用户的gid与文件的gid相同,则此修补程序允许〜/ .ssh文件将组可写位设置为(g + w)。补丁程序的secure_permissions()函数将执行此检查。检查的阶段之一是使用getpwent()浏览每个passwd条目,并将条目的gid与文件的gid进行比较。

在具有许多条目和/或慢速NIS / LDAP身份验证的系统上,此检查将很慢。 nscd不会缓存getpwent()调用,因此,如果服务器不在本地,则将通过网络读取每个passwd条目。在我发现的系统上,每次调用ssh或登录系统大约要花4秒的时间。

解决方法是通过执行chmod g-w ~/.ssh/*删除〜/ .ssh中所有文件上的可写位。

#10 楼

我发现重新启动systemd-logind.service仅能解决该问题几个小时。尽管不再显示motd,但在sshd_config中将UsePAM从yes更改为no导致快速登录。
关于安全问题的评论?

评论


我在这里经历了所有其他建议,这是唯一在我的Samba4支持服务器上解决此问题的方法……谢谢!

–迪文·菲利普斯(Deven Phillips)
16-10-21在12:35

警告:Red Hat Enterprise Linux中不支持“ UsePAM no”,可能会导致一些问题。

– bbaassssiiee
17年1月3日,11:55

#11 楼

可以正常工作。

# uname -a
SunOS oi-san-01 5.11 oi_151a3 i86pc i386 i86pc Solaris
# ssh -V
Sun_SSH_1.5, SSH protocols 1.5/2.0, OpenSSL 0x009080ff
# echo "GSSAPIAuthentication no" >> /etc/ssh/sshd_config
# echo "LookupClientHostnames no" >> /etc/ssh/sshd_config
# svcadm restart ssh


UseDNS否不适用于OpenIndiana! >
如果服务器无法解析,则“ LookupClientHostnames no”

#12 楼

如果以上答案均无效,并且您面临DNS反向查找问题,则还可以检查是否已安装并正在运行nscd(名称服务缓存守护程序)。

如果出现此问题,是因为您没有dns缓存,并且每次查询不在主机文件中的主机名时,您都将问题发送到名称服务器,而不是在缓存中查找

我尝试了上述所有选项,起作用的更改是从nscd开始的。

#13 楼

要完成所有表明DNS解析会减慢ssh登录速度的答案,有时会缺少防火墙规则。例如,如果您默认情况下丢弃所有INPUT模式,则
/>
,那么您将必须接受ssh端口和DNS请求的输入

iptables -t filter -P INPUT DROP


#14 楼

ssh -vvv连接非常好,直到它挂在系统上以尝试使终端至少20秒钟为止:

再次!

这是在debian8上!因此,systemd是这里的问题!

注意:Bastien Durel已经给出了此问题的答案,但是它缺少调试信息。我希望这对某人有帮助。

评论


我在RHEL7(CentOS 7)上挂有“进入交互式会话”的问题,并通过在/etc/pam.d/postlogin中取消会话[default = 1] pam_lastlog.so nowtmp showfailed解决了它。在基于容器的OpenVZ VPS上,显然更新lastlog文件的速度非常慢。

–贾斯汀·ᚅᚔᚈᚄᚒᚔ
18-12-28 at 4:32

#15 楼

我最近发现了导致ssh登录缓慢的另一个原因。

如果您的系统中安装了DenyHosts,可能会发生这种情况。 />
这是DenyHosts常见问题的链接,有关如何从UseDNS no删除条目-请参阅如何删除DenyHosts阻止的IP地址?

#16 楼

我们可能会发现首选的名称解析方法不是主机文件,而是DNS。例如,这是通常的配置:

[root@LINUX1 ~]# cat /etc/nsswitch.conf|grep hosts
#hosts:     db files nisplus nis dns
hosts:      files dns myhostname


首先,到达主机文件(选项:文件),然后到达DNS(选项:dns),但是我们发现已经添加了另一个无法运行的名称解析系统,这导致我们尝试执行此操作的速度很慢反向解析。

如果名称解析顺序不正确,则可以在以下位置进行更改:/etc/nsswitch.conf

摘自:http://www.sysadmit.com/ 2017/07 / linux-ssh-login-lento.html

#17 楼

我尝试了所有答案,但没有一个起作用。终于找到了我的问题:

首先我运行sudo tail -f /var/log/auth.log
,所以我可以看到ssh的日志
,然后在另一个会话中运行ssh 172.16.111.166并注意到等待
br />
/usr/bin/sss_ssh_knownhostsproxy -p 22 172.16.111.166


搜索后,我在/ etc / ssd / ssh_config中找到了这行

ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p %h

br />

#18 楼

注意:本教程最初是作为“如何调试”的教程,但最终成为在Ubuntu 16.04 LTS服务器上对我有帮助的解决方案。完成时间;这是新SSH登录名上的系统信息打印输出。请注意,该命令并非在所有系统上都可用,请安装landscape-sysinfo软件包。 (“但是等等,还有更多...”)


在有问题的计算机上的另一个端口上启动第二个ssh服务器,以调试模式执行,这不会使其分叉并打印出调试消息:

sudo /usr/sbin/sshd -ddd -p 44321


以详细模式从另一台计算机连接到该服务器: >
我的客户在开始睡觉之前就输出以下行: br />
ssh -vvv -p 44321 username@server


我注意到,当我将landscape-common更改为UsePAM yes时,此问题得以解决。影响系统上的这个问题。

我不知道为什么,并且我也不会将UsePAM no留在UseDNS,因为我不知道副作用是什么,但这让我继续研究。

所以,请不要以为这是答案,而是开始上网的第一步


所以我继续研究,并用UsePAMUsePAM)运行no。这产生了以下内容:

debug1: Entering interactive session.
debug1: pledge: network


sshd使我感到怀疑,显然,该过程正在等待strace中的东西的结果

因此,我将sudo strace /usr/sbin/sshd -ddd -p 44321放入/etc/update-motd.d并运行了/etc/update-motd.d,以禁止PAM运行生成此动态cd的所有文件,其中包括系统负载以及是否需要升级软件包,从而解决了这个问题。
这是一台基于“节能” N3150 CPU的服务器,它有很多工作要做24/7,因此我认为收集所有这些motd数据实在太繁琐了。

我可能会开始有选择地启用该文件夹中的脚本,以查看有害程度较小的脚本,但是特别调用/etc/update-motd.d非常慢,并且sudo chmod -x *确实会调用该命令。我认为这是造成延迟最大的原因。
重新启用大多数文件后,我得出的结论是
Message Of The Daylandscape-sysinfo是造成我麻烦的原因。 50-landscape-sysinfo执行大约5秒钟,50-landscape-sysinfo执行大约3秒。所有剩余的文件总共约2秒钟。

99-esm50-landscape-sysinfo都不重要。 99-esm打印出有趣的系统统计信息(如果空间不足,也可以打印!),而50-landscape-sysinfo打印出与99-esm相关的消息。最后,您可以使用50-landscape-sysinfo创建脚本并根据要求获取该打印输出。

#19 楼

这个线程已经提供了很多解决方案,但是这里没有给出我的=)。
就这样了。 .bash_history文件已损坏。
由于登录时已读取该文件,因此导致登录延迟。删除文件后,登录时间恢复到正常状态,就像瞬间一样。

希望对其他人有所帮助。

#20 楼

我发现PAM正在读取文件/ var / log / btmp,由于人们试图强行使用我的服务器,该文件变得很大。这导致一分钟的登录时间。清除此文件即可解决问题。

#21 楼

对我来说,我需要GSSAPI,并且我不想关闭反向DNS查找。这似乎不是一个好主意,所以我检查了主页resolv.conf。事实证明,我和我通过SSH连接到的服务器之间的防火墙正在干扰DNS请求,因为它们的格式不是防火墙所期望的。最后,我要做的就是将这行添加到我要通过SSH进行连接的服务器上的resolv.conf中:

options single-request-reopen

#22 楼

值得注意的是,CentOS 7上的bind软件包更新中断了命名,现在在日志中指出/etc/named.conf存在权限问题。它在0640上运行了好几个月,现在它需要0644。这很有意义,因为命名守护进程属于“命名”用户。
命名失败,从ssh登录到本地Web服务器的页面服务,缓慢的LAMP应用等,一切都很缓慢,这很可能是因为每个请求在查找外部,辅助DNS之前都会在死机上超时已配置。

#23 楼

对我来说,我的本地/etc/hosts文件中存在一个问题。因此,ssh尝试使用两个不同的IP(一个错误),该IP永远超时。

使用ssh -v达到了目的:

$ ssh -vvv remotesrv
OpenSSH_6.7p1 Debian-5, OpenSSL 1.0.1k 8 Jan 2015
debug1: Reading configuration data /home/mathieu/.ssh/config
debug1: /home/mathieu/.ssh/config line 60: Applying options for remotesrv
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to remotesrv [192.168.0.10] port 22.
debug1: connect to address 192.168.0.10 port 22: Connection timed out
debug1: Connecting to remotesrv [192.168.0.26] port 22.
debug1: Connection established.


评论


服务器的/ etc / hosts?

–丹尼尔F
18年11月20日在19:17

#24 楼

如果ssh需要时间,那么我们可以按照以下步骤进行操作:
有2个文件

将更改sshd_config

我们可以取消注释行号115
[root @ mycentos〜]#vi / etc / ssh / sshd_config
UseDNS no->默认#UseDNS no->删除#->仅使用UseDNS no
保存sshd文件并重新启动sshd服务
[root @ mycentos〜]#systemctl restart sshd
如果不行,再次花点时间,我们可以按照以下步骤进行更多更改:(取消注释下面的行)


GatewayPorts否


PermitTTY是


UseDNS no->行号115


GSSAPIAuthentication否->行号79


重新启动sshd服务并尝试使用ssh
[root @ mycentos〜]#systemctl重新启动sshd