我有两个带有arch linux
和 的虚拟机debian
(在 下运行virtual box
)。不久前,通过 .NET 连接到arch
VM开始需要花费大量时间ssh
。一段时间后的第一次,连续的尝试很快就会发生。这是我在arch
虚拟机中看到的内容:
debug1: userauth-request for user yuri service ssh-connection method none
debug1: attempt 0 failures 0
debug3: Trying to reverse map address 10.0.2.2.
# ^^^ spends a lot of time after this line
debug2: parse_server_config: config reprocess config len 314
debug2: input_userauth_request: setting up authctxt for yuri
debug1: PAM: initializing for "yuri"
debug1: PAM: setting PAM_RHOST to "10.0.2.2"
debug1: PAM: setting PAM_TTY to "ssh"
debug2: input_userauth_request: try method none
Failed none for yuri from 10.0.2.2 port 35786 ssh2
10.0.2.2
是虚拟机的默认网关。这是什么意思呢?
PS这是一个好答案,感谢它,我能够在研究这个问题方面取得一些进展。
答案1
我的猜测是,问题是 DNS 请求超时。尝试...关闭您正在连接的服务器上的 UseDNS 选项。
服务器日志几乎证实了这一点(发布它做得很好:)。
debug3: Trying to reverse map address 10.0.2.2.
# ^^^ spends a lot of time after this line
看着man sshd_config
:
UseDNS Specifies whether sshd(8) should look up the remote host name and check that the resolved host name for the remote IP address maps back to the very same IP address. The default is “yes”.
请注意,这是几乎毫无意义。支票确实不是终止连接。如果没有通过,它只会记录一条手指摇动的消息:
Jul 9 05:43:00 brick sshd[18971]:地址 200.41.233.234 映射到 host234.advance.com.ar,但这不会映射回该地址 - 可能的闯入尝试!
这只会为使用不称职的 ISP 的用户产生可怕的误报。
好的,那么这怎么会导致延迟呢?
如果 DNS 服务器没有立即响应,客户端将倾向于等待并重试。 (如果 DNS 数据包由于网络拥塞而延迟或丢失)。如果 DNS 服务器根本没有响应,客户端最终将放弃。例如,dig
在我的系统上重试 15 秒。 (它使用了更具体的dns库代码,但原理是相同的)。
$ time dig invalid @192.0.2.1
; <<>> DiG 9.9.4-P2-RedHat-9.9.4-12.P2.fc20 <<>> invalid @192.0.2.1
;; global options: +cmd
;; connection timed out; no servers could be reached
real 0m15.020s
user 0m0.010s
sys 0m0.011s
所以问题是反向查找没有得到响应。您可以自己手动在服务器上运行相同的查找,并且您应该看到与 ssh 相同的延迟。 getent hosts 10.0.2.2
。
答案2
在此阶段,有多种可能会导致连接速度缓慢。从这链接,我看到的一个问题与加密有关。
我终于知道是什么问题了。
我的 /home/user 目录已加密,因此除非我登录,否则 ssh 无法访问它。
还有一种可能来自这里与服务有关SELinux
。
是的,
SELinux
可能是原因。该.ssh
目录可能被错误标记。看着/var/log/audit/audit.log
。它应该被标记ssh_home_t
。检查与ls -laZ
.如果需要的话就跑吧restorecon -r -vv /root/.ssh
。
也来自这链接,我还看到 PAM 身份验证可能是 SSH 缓慢的原因。
编辑您的“/etc/ssh/ssh_config" 并注释掉这些行:
GSSAPIAuthentication yes GSSAPIDelegateCredentials no