为什么我的 SSH 登录很慢?

Pet*_*ons 121 linux ssh performance login solaris

我看到 SSH 登录出现延迟。具体来说,有两个地方我看到了从瞬时到多秒延迟的范围。

  1. 在发出 ssh 命令和获得登录提示之间
  2. 在输入密码和加载 shell 之间

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

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

Pau*_*l R 148

尝试设置UseDNSnoin/etc/sshd_config/etc/ssh/sshd_config

  • +1 这是登录 ssh 时最常见的延迟原因 (10认同)
  • 当我使用 IP 地址(家庭局域网)登录时,我持怀疑态度,但此解决方案解决了我的问题。看在 Google 的份上,虽然它是在之后发生的,但延迟与“key: /home/mylogin/.ssh/id_ecdsa ((nil))”消息无关(运行 `ssh -vvv` 时)。 (3认同)
  • 这个小设置让我的 ssh 登录速度变得异常快......哇。 (3认同)
  • “Solaris 11 注意:我在 Solaris 11 上尝试了 UseDNS no 设置,它破坏了服务启动。服务的响应不完全是友好的。YMMV 与其他 *Nix 变体,但似乎 UseDNS no 可能不是 Solaris 11 中的有效选项.” - [Keith Hoffman] (http://superuser.com/users/113111/keith-hoffman) 的评论 (2认同)
  • +1 使其明确,文件`/etc/ssh/sshd_config`!我添加了`/etc/sshd_config` 并没有看到任何区别!! (2认同)
  • 将此设置添加到您的“sshd_config”中,即使它尚未注释或设置。为我解决了这个问题。 (2认同)

小智 49

当我在ssh -vvv具有类似性能缓慢的服务器上运行时,我在这里看到了一个挂起:

debug1: Next authentication method: gssapi-with-mic
Run Code Online (Sandbox Code Playgroud)

通过编辑/etc/ssh/ssh_config和注释掉该身份验证方法,我使登录性能恢复正常。这是我在/etc/ssh/ssh_config服务器上的内容:

GSSAPIAuthentication no
Run Code Online (Sandbox Code Playgroud)

您可以在服务器上全局设置它,因此它不接受 GSSAPI 进行身份验证。只需添加GSSAPIAuthentication no/etc/ssh/sshd_config服务器上并重新启动服务。


小智 23

对我来说,罪魁祸首是 IPv6 解析,它是超时。(我猜我的主机提供商的 DNS 设置错误。)我通过执行 发现了这一点ssh -v,它显示了哪一步挂起。

解决方案是ssh使用以下-4选项:

ssh -4 me@myserver.com

  • ...如果没有确认这是问题的调试消息,这个答案特别无用。 (5认同)
  • 我怀疑随着时间的流逝和事情(严重和)慢慢适应 IPV6,我们中越来越多的人会看到这一点。谢谢! (2认同)

小智 17

使用systemd,一些升级后login可能会挂在dbus与logind的通信上,那么你需要重新启动logind

systemctl restart systemd-logind
Run Code Online (Sandbox Code Playgroud)

在 debian 8、arch linx 和 suse 列表上看到了

  • 我也是。首先花了一些时间排除所有可能的 DNS 和 SSH 问题。注意:如果问题也适用于慢速 sudo,请先尝试此操作。 (2认同)

Ben*_*ier 9

您始终可以从显示当前正在执行的操作ssh-v选项开始。

$ ssh -v you@host
Run Code Online (Sandbox Code Playgroud)

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

  • 由于您写的是手动输入密码,因此我建议您尽可能使用公钥身份验证。这使您成为速度瓶颈。

  • 您还可以禁用 X 转发-x和身份验证转发-a(默认情况下这些可能已经被禁用)。如果您的客户端需要为ssh命令启动 X 服务器(例如,在 OS X 下),则尤其禁用 X-forwarding 可以大大提高速度。

其他一切实际上取决于您在何时何地遇到什么样的延迟。


Huy*_*ens 8

关于 2. 点,这里的答案不需要修改服务器,也不需要具有 root/administrative 权限。

您需要编辑您的“用户 ssh_config”文件,它是:

vi $HOME/.ssh/config
Run Code Online (Sandbox Code Playgroud)

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

并添加:

Host *
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes
Run Code Online (Sandbox Code Playgroud)

如果需要,您可以在每个主机的基础上执行此操作:) 示例:

Host linux-srv
  HostName 192.158.1.1
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes
Run Code Online (Sandbox Code Playgroud)

确保 IP 地址与您的服务器 IP 匹配。一个很酷的优势是现在 ssh 将为该服务器提供自动完成功能。所以你可以输入ssh lin+ Tab,它应该自动完成到ssh linux-srv.


小智 7

我发现 PAM 正在读取文件 /var/log/btmp,由于人们试图暴力破解我的服务器,该文件变得非常大。这导致登录时间为一分钟。清除该文件解决了问题。


小智 6

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