ssh exec一个简单的命令花费了几秒钟

时间:2018-11-15 10:04:45

标签: performance shell ssh

我发现ssh exec一个简单的命令要花一秒钟的时间,这正常吗?如果没有,如何加快速度?

[root@ops-test-vm-154:~]# time ssh root@10.17.1.155 'echo "hello,world!"'
hello,world!

real    0m1.805s
user    0m0.009s
sys 0m0.005s

vm-154和vm-155之间的延迟很短

[root@ops-test-vm-154:~]# ping 10.17.1.155
PING 10.17.1.155 (10.17.1.155) 56(84) bytes of data.
64 bytes from 10.17.1.155: icmp_seq=1 ttl=64 time=0.142 ms
64 bytes from 10.17.1.155: icmp_seq=2 ttl=64 time=0.136 ms
64 bytes from 10.17.1.155: icmp_seq=3 ttl=64 time=0.129 ms
64 bytes from 10.17.1.155: icmp_seq=4 ttl=64 time=0.110 ms
^C
--- 10.17.1.155 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4421ms
rtt min/avg/max/mdev = 0.110/0.128/0.142/0.014 ms

顺便说一句:我需要通过在vm-155中执行脚本来实时检查服务状态,因此vm-154每秒执行一次命令ssh vm-155 status.sh。但是,即使是简单的命令echo helloworld也要花费一秒钟的时间。因此解决方案很糟糕。我希望加快速度,或者可能是更好的解决方案。

最良好的祝愿!


有vm-155 / etc / ssh / sshd_config,我添加了UseDNS no并执行了service sshd restart,但是仍然需要多一秒钟才能到达echo hello,world!

Protocol 2
SyslogFacility AUTHPRIV
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding yes
UseDNS no
Subsystem   sftp    /usr/libexec/openssh/sftp-server

2 个答案:

答案 0 :(得分:-1)

您可以尝试的一件事是以详细模式运行SSH,并查看在哪个阶段浪费最多的时间。

ssh -vvv root@10.17.1.155 'echo "hello,world!"'

然后根据您的发现,采用ssh配置文件来排除速度较慢的密码套件和其他占用大量CPU的资源。有关here的一些提示。 但是,如果每次都建立新的连接,则将无法通过ssh达到接近实时的性能。您可以将您的脚本/命令放入循环中,并将seep值设置为1s。

ssh root@10.17.1.155 'while true; do echo "Hello, world!"; sleep 1s; done'

但是我会使用专门为SNMP协议之类的应用程序设计的东西。这是一个示例配置: https://www.incredigeek.com/home/snmp-and-shell-script/

答案 1 :(得分:-1)

SSH连接过程中的一个延迟源是服务器对DNS的查找。当客户端连接到服务器时,服务器可以选择查找客户端的IP地址以获取其主机名。根据各种问题,查询可能需要花费一秒钟的时间到十秒钟甚至更长的时间。

部署最广泛的SSH服务器是OpenSSH。 OpenSSH sshd服务器具有setting named UseDNS服务器,该服务器控制是否对传入的连接执行DNS查询:

  

使用DNS
  指定sshd(8)是否应查找远程主机名,并检查所解析的远程IP地址的主机名是否映射回相同的IP地址。

您应检查要连接的服务器上的UseDNS是否设置为“ no”。