Как копировать файлы и запускать команды через SSH
Управлять *nix серверами можно через подключение с помощью протокола безопасного входа SSH (Secure Shell). Его используют, когда нужно загрузить или выгрузить файл на удаленном сервере. Популярность SSH-подключения обусловлена тем, что действия с файлами через защищенное соединение полностью безопасно и не вызывает сложностей. Это одна из базовых функций SSH, которая реализуется или через команду scp в Linux-системах или с помощью pscp.exe в составе SSH-клиента Putty для Windows.
Как копировать файлы на удаленном сервере через протокол SSH
Работа с файлами на ОС семейства Linux
Для работы с файлами необходимо использовать команды такого формата:
scp [модификатор] [источник] [место назначения]
Если для работы используется удаленный сервер, применяют формат параметра, в котором прописываются пользователь и путь к файлу:
[пользователь]@[сервер]:[путь_к_файлу]
Пароль от аккаунта на удаленном сервере вводят уже после того, как команда будет запущена.
Следующая команда позволяет скопировать локальный файл /home/user/file.tgz в домашний каталог на удаленном сервере. Перед вводом нужно заменить 123.123.123.123 на реальный IP-адрес сервера.
scp /home/user/file.tgz root@123.123.123.123:/root
Для того, чтобы скачать файл с удаленного сервера, нужно ввести следующую команду:
scp root@123.123.123.123:/root/file.tgz /home/user
Не обязательно скачивать файлы по одному. В качестве источника можно указывать несколько файлов, разделив их пробелом. В конце нужно указать параметр, который укажет место для скачивания. В этом случае все указанные файлы копируются за один шаг. Например, загрузка файлов file1.tgz и file2.tgz из локального каталога на удаленный сервер вызывается следующей командой:
scp file1.tgz file2.tgz root@123.123.123.123:/root
Скопировать весь каталог, включая все файлы и подкаталоги, можно с помощью модификаторов команды –r. При этом файлы рекурсивно перенесутся из источника в место назначения. Вот пример команды, с помощью которой можно скопировать локальный каталог /home/user/dir на удаленный сервер:
scp –r /home/user/dir root@123.123.123.123:/root
Для SSH-серверов, использующих нестандартные порты, нужно использовать опцию –P. Вот так будет выглядеть команда для подключения к удаленному серверу через порт 10022:
scp –P 10022 /home/user/file.tgz root@123.123.123.123:/root
Если запустить scp без указания параметров, появится справка о том, какие еще модификаторы поддерживает команда.
Работа с файлами на ОС семейства Windows
Пользователи операционной системы Windows и клиента для работы с сетевыми протоколами удаленного доступа Putty могут использовать те же форматы команды, что и пользователи Linux. Единственное отличие — в названии исполняемого файла и в необходимости использовать синтаксис указания путей к файлам и каталогам Windows.
После запуска командной строки (cmd.exe) или PowerShell нужно перейти в каталог, в котором находится файл pscp.exe. Здесь нужно ввести следующую команду:
pscp.exe C:Tempfile.tgz root@123.123.123.123:/root
Для запуска из другой папки нужно прописать весь путь к pscp.exe. При этом, если в записи содержатся пробелы, необходимо взять ее в двойные кавычки:
“C:Program FilesPuttypscp.exe” C:Tempfile.tgz root@123.123.123.123:/root
Как и в запуске на Linux, для получения информации о синтаксисе команды и поддерживаемых модификаторах необходимо запустить pscp.exe без указания параметров.
Как запускать команды на удаленном сервере через протокол SSH
Протокол SSH может не только выполнять работу в интерактивном режиме, но и поддерживать единичный запуск команд на удаленном сервере. Разберем, как это делается на Linux и Windows.
Запуск команд через SSH на ОС семейства Linux
При работе будут использоваться команды следующего формата:
ssh [пользователь]@[сервер] ‘[команда]’
В начале работы нужно ввести пароль. Введенная команда отобразится в консоли. Вот так будет выглядеть получение информации об ОС, установленной на удаленном сервере:
ssh root@123.123.123.123 ‘uname -a’
За один сеанс можно запустить несколько команд. Для этого нужно разделить разные команды с помощью символа “;” в качестве разделителя. Так будет выглядеть проверка сетевых настроек и активных подключений на удаленном сервере:
ssh root@123.123.123.123 ‘ifconfig; netstat -anp tcp’
Запустить на удаленном сервере не отдельную команду, а локальный файл сценария можно с помощью командного интерпретатора. Для этого нужно вызвать его в SSH в режиме исполнения сценария, а затем передать ему файл сценария. Вот как это будет выглядеть:
ssh root@123.123.123.123 ‘bash -s’ < /home/user/myscript.sh
После введения этой команды на удаленном сервере запустится локальный файл /home/user/myscript.sh.
Как и при работе с файлами, справка о синтаксисе и перечень модификаторов для расширения функциональности команды вызывается при запуске команды SSH без параметров.
Запуск через SSH на ОС семейства Windows
Подключение к удаленному серверу с устройства под управлением операционной системы Windows происходит с помощью клиента Putty. В его состав входит файл plink.exe, с которым можно работать прямо из командной строки (cmd.exe) или через кроссплатформенное средство автоматизации от Microsoft PowerShell.
Чтобы запустить команду на удаленном сервере нужно ввести:
plink.exe [сервер] -ssh -l [пользователь] “[команда]”
Конфигурацию сетевых интерфейсов можно проверить с помощью команды:
plink.exe 123.123.123.123 -ssh -l root “ifconfig”
При одновременном запуске нескольких команд через plink.exe, как и в Linux для их разделения используют “;”:
plink.exe 123.123.123.123 -ssh -l root “ifconfig; netstat -anp tcp”
При этом команды из локального файла можно запустить с помощью дополнительного ключа -m:
plink.exe 123.123.123.123 -ssh -l root -m “C:Tempmyscript.sh”
Теперь останется запустить команду plink.exe без параметров, чтобы посмотреть информацию о синтаксисе и дополнительные модификаторе команды.
Использование SSH позволяет применять единый подход к подключению к серверам для разных машин, увеличить скорость подключения и работы с удаленной машиной, а также упростить настройки.