Простая команда ssh exec стоила несколько секунд - PullRequest
0 голосов
/ 15 ноября 2018

Я считаю, что 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 голосов
/ 15 ноября 2018

Одним из источников задержек во время процесса подключения SSH является поиск DNS сервером. Когда клиент подключается к серверу, сервер может при желании найти IP-адрес клиента, чтобы получить его имя хоста. В зависимости от множества проблем выполнение запроса может занять от доли секунды до десяти секунд или более.

Самым распространенным SSH-сервером является OpenSSH . Сервер OpenSSH sshd имеет параметр с именем UseDNS , который контролирует, выполняет ли он запросы DNS для входящих соединений:

UseDNS
Указывает, должен ли sshd (8) искать имя удаленного хоста и проверять, соответствует ли разрешенное имя хоста для удаленного IP-адреса тому же IP-адресу.

Вы должны убедиться, что UseDNS установлен на «нет» на сервере, к которому вы подключаетесь.

0 голосов
/ 15 ноября 2018

Одна вещь, которую вы можете попробовать, - запустить SSH в подробном режиме и посмотреть, на какой стадии он тратит больше всего времени.

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

А затем, основываясь на ваших выводах, примите ваш конфигурационный файл ssh, чтобы исключить медленные комплекты шифров и другие ресурсоемкие процессы. Несколько советов об этом здесь . Однако вы не сможете достичь производительности, близкой к реальной в реальном времени, по ssh, если будете каждый раз устанавливать новое соединение. Вы можете поместить свой скрипт / команду в цикл и установить значение seep равным 1 с.

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/

...