ssh: как выполнять команды на удаленном сервере Печать
Добавил(а) microsin   

Программа клиента SSH может использоваться для логина на удаленную машину или сервер и выполнения команд на этой удаленной машине. Указанная команда выполняется на удаленном хосте/сервере вместо локального шелла. Рассмотрим, как запускать и выполнять команды на удаленной машине под управлением Linux, macOS, *BSD или других операционных системах семейства Unix [1].

Синтаксис выполнения команды следующий:

ssh user1@server1 command1
ssh user1@server1 'command2'
# использование pipe: #
ssh user1@server1 'command1 | command2'
# выполнение нескольких команд (они должны быть окружены двойными кавычками): #
ssh admin@box1 "command1; command2; command3"

Клиент ssh будет выполнять логин на удаленный сервер server1 используя имя пользователя user1, и запустит на этом сервере команду command1.

[Примеры удаленного запуска команд с помощью ssh]

Получение даты и времени удаленного сервера:

$ ssh user1@server1 date

Просмотр используемой информации на диске удаленного сервера:

$ ssh user1@server1 'df -H'

Определение версии ядра удаленного сервера и имени дистрибутива Linux:

$ ssh root@nas01 "uname -mrs"

Или так:

$ ssh root@nas01 lsb_release -a

Запуск скрипта /scripts/backup.sh:

$ ssh operator@oracle1 '/scripts/backup.sh'

Запуск команды sudo или su делается следующим синтаксисом:

## синтаксис sudo ##
ssh -t user@hostname sudo command
ssh -t user@hostname 'sudo command1 arg1 arg2'
 
## синтаксис su ##
ssh user@nas01 su -c "/path/to/command1 arg1 arg2"
 
# специфика RHEL/CentOS #
ssh user@nas01 su --session-command="/path/to/command1 arg1 arg2"
ssh vivek@nixcraft.home.server su --session-command="/sbin/service httpd restart"

Без опции -t будет ошибка чтения "sudo: Sorry, you must have a tty to run sudo on a Linux and Unix".

[Запуск и выполнение через ssh нескольких команд]

Создайте новый файл с именем commands.txt, используя команду cat:

$ cat > commands.txt

Добавьте в этот файл команды, которые надо выполнить:

date
uptime
df -H

После этого можете выполнить эти команды удаленно, используя команду ssh, путем передачи на её вход содержимого локального файла commands.txt:

$ ssh server_name < commands.txt
$ ssh user@server_name < commands.txt
$ ssh admin@ls.backup < commands.txt

[Как выполнить несколько команд из скрипта]

Пример выполнения нескольких команд из скрипта, используя соответствующий функционал bash:

#!/bin/bash
 
_remote="ls.backup"
_user="vivek"
 
echo "Local system name: $HOSTNAME"
echo "Local date and time: $(date)"
 
echo
echo "*** Running commands on remote host named $_remote ***"
echo
ssh -T $_remote << 'EOL'
→→now="$(date)"
→→name="$HOSTNAME"
→→up="$(uptime)"
→→echo "Server name is $name"
→→echo "Server date and time is $now"
→→echo "Server uptime: $up"
→→echo "Bye"
EOL

Имейте в виду, что вы передаете опцию -T для ssh, когда хотите запретить выделение псевдотерминала. С другой стороны, мы можем принудительно использовать выделение псевдотерминалов в обход опции -t для ssh чтобы выполнять на удаленной машине произвольные основанные на экране программы, что может быть очень полезно. Например, когда реализуются сервисы меню. Несколько опций -t принудительно выделяют tty, даже если у ssh нет локального tty. Подробнее см. документацию по ssh командой:

$ man ssh

[Ссылки]

1. How To Run / Execute Command Using SSH site:cyberciti.biz.
2. sshfs: монтирование файловой системы удаленного сервера.
3. Automatically enter SSH password with script site:stackoverflow.com.