Программа клиента 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 '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:
Добавьте в этот файл команды, которые надо выполнить:
После этого можете выполнить эти команды удаленно, используя команду 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 командой:
[Ссылки]
1. How To Run / Execute Command Using SSH site:cyberciti.biz. 2. sshfs: монтирование файловой системы удаленного сервера. 3. Automatically enter SSH password with script site:stackoverflow.com. |