Запустить команды через SSH в Unix/Linux

Запустить команды через SSH в Unix/Linux

Очень удобно запускать команды прям через подключение SSH. В данной статье я приведу наглядные примеры.

Запуск команд выглядит следующим образом:

$ ssh [your_my_SSH_user]@[your_server_or_IP] '[some_command]'
  • your_my_SSH_user —  Это имя пользователя для подключения к серверу через SSH.
  • your_server_or_IP — Это название сервера или его IP для подключения к серверу через SSH.
  • some_command  — Некоторая(ые) команды.

Узнать uptime сервера, можно:

$ ssh captain@66.66.66.66 'uptime'

Показать сколько место имеется на разделах:

$ ssh captain@66.66.66.66 'df -h'

Вы так же, можете запускать sudo команды:

$ ssh -t captain@myserver "sudo /sbin/shutdown -h now"

Метод 1.

Синтаксис выглядит следующим образом:

$ ssh [your_my_SSH_user]@[your_server_or_IP] '[some_command]; [some_command_2]; [some_command_3]'

Для примера, нужно узнать время (дату) на сервере и потом выполнить ребут ОС:

$ ssh captain@66.66.66.66 'date; reboot'

Так же, можно использовать двойные кавычки.

Метод 2.

$ ssh [your_my_SSH_user]@[your_server_or_IP] '[some_command] | [some_command_2] | [some_command_3]'

Для примера, смотрим состояние памяти ( сколько свободно, занято) и проверяем Load Average (LA):

$ ssh captain@66.66.66.66 'free -m | cat /proc/loadavg'

Или:

$ ssh bar@foo "command1 && command2"

Метод 3.

$ ssh [your_my_SSH_user]@[your_server_or_IP] << EOF
some_command
some_command_2
some_command_3
EOF

Предположим, нужно узнать версию ядра Unix/Linux,  информацию о процессоре(ах)  и количество RAM в системе:

$ ssh captain@66.66.66.66 << EOF
uname -a
grep "model name" /proc/cpuinfo
grep MemTotal /proc/meminfo
EOF

Метод 4.

Запускаем скрипт который находится локально, на удаленном сервере:

$ ssh [your_my_SSH_user]@[your_server_or_IP] 'bash -s' < [this_script_is_local]

Привер, имеется на моем маке ‘this_script_is_local.sh’  скрипт и я хотел бы запустить его на удаленной машине. Можно это сделать так:

$ ssh captain@66.66.66.66 'bash -s' < this_script_is_local.sh

Метод 5.

Используем пайп для перенаправления. Пример исправления репликации  (Master-Slave):

(echo "STOP SLAVE;" && mysqldump --single-transaction --master-data -A && echo "START SLAVE;") | ssh -C vnatarov@Linentablecloth-Prod-DB-2 sudo mysql

PS: Вот полезные статье по теме репликации:

Репликация MySQL в виде Master/Slave

Настройка репликации Master-Master на MySQL

Или:

cat my_bash_script_here.sh | ssh -t captain@linux-notes.org

При необходимости, можно скопировать содержимое удаленного файла (команды) в буфер обмена:

$ ssh my_SSH_user@my_IP_or_HOST cat /some_path_to_file/ | xclip

А так можно скопировать вывод команды:

$ ssh my_SSH_user@my_IP_or_HOST uname -a | xclip

Похожий прием можно использовать для сравнения двух файлов:

$ ssh my_SSH_user@my_IP_or_HOST cat /some_path_to_remote_file | diff /some_path_to_locate_file -

Более сложные команды, для примера — нужно из списка ИП выбрать случайный. К этому ИПшнику выполнить подключение и «убить» рандомный процесс. Мн потребовалось около 2 часов на данную реализацию:

GetIP=$(head -$((${RANDOM} % `wc -l < IP_list.txt` + 1)) IP_list.txt | tail -1); GetPID=$(ps aux | grep mysql| grep -Ev "grep"|awk '{print $2}' | while read line; do echo "$RANDOM $line"; done | sort | cut -d ' ' -f2 | head -n1); sudo ssh -t captain@`echo $GetIP` echo 'I will kill you RANDOMLY!' && echo "`echo $GetPID`"

Вот и все. Статья «Запустить команды через SSH в Unix/Linux» завершена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.