Запустить команды через 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» завершена.