SSH 连接建立太慢

SSH 连接建立太慢

我在连接到具有 500 MB 内存的本地 Centos 6.3 虚拟机时遇到问题。

下面是连接的输出ssh -vvv localhost

OpenSSH_6.3, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /usr/local/etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [127.0.0.1] port 22.
^^^^^^^^^^ Loading this statement takes more than a minute

debug1: Connection established.
...

debug1: Next authentication method: password 
root@localhost's password:
^^^^^^^^^^ This step takes a minute too

debug3: packet_send2: adding 64 (len 50 padlen 14 extra_pad 64)
debug2: we sent a password packet, wait for reply
debug1: Authentication succeeded (password).
Authenticated to localhost ([127.0.0.1]:22).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug3: packet_set_tos: set IP_TOS 0x10
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug2: channel 0: request shell confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Last login: Wed Oct  9 13:27:02 2013 from 10.0.0.2

请建议我如何摆脱这种延迟。

答案1

我的猜测是,问题是 DNS 请求超时。尝试通过 IP 地址而不是主机名进行连接,并关闭UseDNS您要连接的服务器上的选项。除此之外:

  1. 假设您从虚拟机主机连接到那里,我希望ssh localhost连接到主机,而不是来宾虚拟机。当然,除非您有一些有趣的网络设置。

  2. 对于第一次延迟,您可能需要运行它并检查客户端挂起的strace系统调用。ssh

  3. 对于第二次延迟,请top在虚拟机中运行以查看连接到虚拟机时发生了什么情况。同时,我建议在备用端口上以调试模式运行 SSH 守护程序并连接到该实例 - 您将看到它在等待的位置 - 只需运行(以 root 身份):

    sshd -ddd -p 2222 -o UsePrivilegeSeparation=no
    

    这将在端口 2222 上启动 SSH 守护进程,记录大量信息 ( -ddd) 并且在登录期间不会使用权限分离(禁用权限分离将更容易查看 strace 中发生的情况,因为只会使用一个进程) 。您还可以添加-o UseDNS=no以禁用上述选项。

答案2

如果是虚拟机,则可能是由于熵不足。使用此行在连接尝试之前/期间监视可用熵:

while true; do sleep 5; cat /proc/sys/kernel/random/entropy_avail; done

如果在连接尝试期间它已经相当低或显着下降,则很可能是罪魁祸首。

编辑:这样做会影响可用熵本身,因为启动新进程会消耗熵。也可以看看https://blog.flameeyes.eu/2011/03/entropy-broken

rng-tools您可以通过安装尝试收集更多熵的守护程序(或)来增加可用熵clrngd,或者确保您的虚拟机分配了正确的熵设备,这取决于您的虚拟化解决方案。

相关内容