Как копировать файлы и запускать команды через 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 позволяет применять единый подход к подключению к серверам для разных машин, увеличить скорость подключения и работы с удаленной машиной, а также упростить настройки.