【问题标题】:ssh exec a simple command cost a few secondsssh exec 一个简单的命令花费几秒钟
【发布时间】:2019-04-18 09:43:13
【问题描述】:

我发现 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

【问题讨论】:

    标签: performance shell ssh


    【解决方案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/

    【讨论】:

    【解决方案2】:

    SSH 连接过程中的一个延迟来源是服务器的 DNS 查找。当客户端连接到服务器时,服务器可以选择查找客户端的 IP 地址以获取其主机名。根据各种问题,查询可能需要几分之一秒到十秒或更长时间才能完成。

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

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

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

    【讨论】:

    • 感谢您的回复。我添加UseDNS no 并重新启动服务sshd。但还需要一秒钟。我在我的问题中添加 /etc/ssh/sshd_config
    猜你喜欢
    • 2012-03-28
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2023-02-05
    相关资源
    最近更新 更多