我在连接到具有 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
您要连接的服务器上的选项。除此之外:
假设您从虚拟机主机连接到那里,我希望
ssh localhost
连接到主机,而不是来宾虚拟机。当然,除非您有一些有趣的网络设置。对于第一次延迟,您可能需要运行它并检查客户端挂起的
strace
系统调用。ssh
对于第二次延迟,请
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
,或者确保您的虚拟机分配了正确的熵设备,这取决于您的虚拟化解决方案。