SSH: Удаленный Запуск Команд или Скрипта — Linux

SSH: Удаленный Запуск Команды

Удаленно запустите команду на сервере по SSH:

$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР 'КОМАНДА'

Примеры

Узнайте аптайм удаленного сервера:

$ ssh root@192.168.1.1 'uptime'

Перезагрузите удаленную машину:

$ ssh root@192.168.1.1 'reboot'

SSH: Запуск Нескольких Команд

В большинстве случаем недостаточно удаленно запустить только одну команду по SSH.

Намного чаще необходимо отправить сразу несколько команд на удаленный сервер, например, для сбора информации с целью инвентаризации и получить результат обратно.

Существует множество способов как это сделать, но я покажу наиболее популярные.

Запустить несколько команд на удаленном хосте по SSH:

$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР 'КОМАНДА1; КОМАНДА2; КОМАНДА3'

— или —

$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР 'КОМАНДА1 | КОМАНДА2 | КОМАНДА3'

— или —

$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР << EOF
КОМАНДА1
КОМАНДА2
КОМАНДА3
EOF

Примеры

Узнайте аптйм и сколько свободного места на диске:

$ ssh root@192.168.1.1 'uptime; df -h'

Узнайте сколько используется памяти и среднюю нагрузку:

$ ssh root@192.168.1.1 'free -m | cat /proc/loadavg'

Узнайте версию ядра, количество ядер CPU и сколько всего RAM:

$ ssh root@192.168.1.1 << EOF
uname -a
lscpu  | grep "^CPU(s)"
grep -i memtotal /proc/meminfo
EOF

SSH: Запуск Bash Скрипта

Не менее распространенная ситуация, когда на Linux сервере лежит како-то Bash скрипт и необходимо по SSH запустить его на другом Linux сервере.

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

Эта задаче безусловно может быть выполнена и при этом довольно просто.

$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР 'bash -s' < СКРИПТ

Пример

Запустите локальный скрипт script.sh на удаленном сервере:

$ ssh root@192.168.1.1 'bash -s' < script.sh

SSH: Запуск Bash Скрипта c аргументами

$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР 'bash -s' -- < СКРИПТ --argument

$ ssh serverA "bash -s" -- < ./ex.bash "-time" "bye" -time bye

$ ssh serverA "bash -s" -- < ./ex.bash "--time" "bye" --time bye

$ ssh serverA "bash -s" -- < ./ex.bash --time "bye" --time bye

$ ssh < ./ex.bash serverA "bash -s -- --time bye" --time bye

Обратите внимание, что перенаправление можно использовать в любом месте команды: например, bash -s -- --time bye < ./ex.bashили даже < ./ex.bash bash -s -- --time bye
Это связано с тем, что оболочка сначала выполняет инструкцию по перенаправлению (независимо от того, где она находится в команде), затем устанавливает перенаправление, а затем выполняет оставшуюся часть командной строки с перенаправлением на месте.