Как скачивать файлы по SSH

Графический интерфейс SFTP


Если на сервере или просто удалённом компьютере запущен SSH, то для передачи файлов на этот компьютер или скачивания файлов с него не нужно устанавливать FTP или любое другое дополнительное программное обеспечение.



SSH из коробки поддерживает протоколы SCP и SFTP. Причём в пакете ssh поставляются одноимённые утилиты scp и sftp для обмена файлами. Подробности о них вы найдёте в статье «SSH (ч.5): Копирование файлов с помощью scp и sftp». Но это утилиты с интерфейсом командной строки, что не всем может быть удобно.



Протокол SFTP поддерживается несколькими кроссплатформенными программами с графическим интерфейсом. То есть, вы можете закачивать и управлять файлами на сервере через программу с графическим интерфейсом. Причём на сервере кроме запущенного SSH больше ничего не требуется.


SFTP в FileZilla


FileZilla — это не только FTP клиент, эта программа также поддерживает FTP через TLS (FTPS) и, главное для нас сейчас, эта программа поддерживает тот самый протокол SFTP. Программа является бесплатной, у неё открыт исходный код, она работает под Linux и Windows.



Использование программы элементарное — нужно указать хост (IP), имя пользователя и порт. Предположим, я хочу подключиться к хосту 192.168.1.68, под пользователем root. В качестве порта нужно указать порт, на котором работает SSH на этом удалённом сервере, по умолчанию это 22.



Можно просто ввести данные в поля, но мне нравится составлять такие URI адреса, которые начинаются на sftp:// - дело в том, что они нам ещё пригодяться!



Итак, я составил адрес



sftp://root@192.168.1.68:22


вставляю его в поле «Хост» и нажимаю кнопку «Быстрое подключение»:






Если вы когда-либо работали с SSH, то вы знаете, что перед каждым первым подключением к новому хосту, нужно согласиться добавить его в список известных хостов:






В этом нет ничего страшного — это сделано для дополнительной защиты (если кто-то подменит хост, то мы об этом узнаем сразу при попытке подключения).



Нажимаем «ОК» и получаем список файлов директории, к которой мы подключились:






Теперь мы можем бродить по каталогам, скачивать файлы с удалённого компьютера и закачивать туда файлы с локальной машины.





SFTP в Double Commander


Double Commander, как и его прототип Total Commander, умеют работать с SFTP с помощью плагина. Но в Double Commander плагин нужно установить, прежде чем эта программа начнёт понимать SFTP.



Я покажу на примере Double Commander в Linux. Если у вас Windows и показанный способ не сработает, то напишите в комментариях, попробуем вместе найти решение (вероятные пути — пробовать плагины Total Commander для SFTP, поскольку Double Commander совместим с ними).



Итак, нам нужен плагин gvfs, скачиваем его.



Распаковываем скаченный архив.



Теперь открываем Double Commander, в меню переходим в «Настройки» → «Параметры» → Вкладка «Плагины»Плагины WFX.






Нажимаем кнопку «Добавить» и указываем скаченный файл:






Сохраняем, закрываем меню настроек, на всякий случай перезапускаем Double Commander.






Теперь нажимаем на эту кнопку и затем выбираем Network:



Как скачивать файлы по SSH



Можно нажать [/b] и ввести уже знакомый нам URI (если честно, мне просто лень расписывать данные по полям):






Можно указать целевой путь, то есть папку, которая будет открыта на сервере после подключения. Кстати, ведь его можно было указать прямо в URI (об этом чуть ниже):






Имя пользователя мы уже указали в URI, поэтому можно пропустить:






У меня для SSH настроен вход без пароля (аутентификация по ключу), поэтому ничего не ввожу:






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






Прямо в URI можно указывать папку, которая должна быть открыта после подключения. Предположим, я хочу, чтобы открывалась папка [b]/var/www/html
, тогда URI будет иметь следующий вид:



sftp://root@192.168.1.68:22/var/www/html


В Double Commander и FileZilla можно настроить подключения, чтобы соединение с сервером происходило сразу при выборе желаемого подключения.


SFTP в менеджере файлов: управление файлами на удалённом хосте через стандартный файловый менеджер


SFTP протокол поддерживается многими графическими файловыми менеджерами, которые можно найти в дистрибутивах Linux. Используя как Nemo (Cinnamon), Nautilus (GNOME), так и Konqueror (KDE), мы можем вводить URI (ссылки) начинающиеся на sftp:// в строку перехода и работать с файлами, расположенными на удалённой системе с запущенным SSH сервером.



К примеру, пользователем на удалённой системе является root, IP адрес удалённого хоста 192.168.1.68 и на нём запущен SSH сервер на 22 порту и я хочу открыть папку /root/bin/. Тогда я открываю стандартный менеджер файлов Linux и ввожу туда адрес:



sftp://root@192.168.1.68:22/root/bin/


Теперь я могу работать с файлами как если бы они были в локальной системе: перетаскивать, смотреть их свойства, загружать на локальный компьютер.






Кстати, желаемое соединение до удалённой системы можно добавить в закладки стандартного менеджера файлов и открывать его одним кликом. И уже несколько лет как стандартный менеджер файлов Linux поддерживает дополнительную вкладку — в настройках вы можете включить вторую панель для файлового менеджера Linux.


Как в curl работать с протоколами SCP и SFTP


В отличие от всех рассмотренных ранее, cURL — это программа с интерфейсом командной строки. Но всё равно рассмотрим и вариант с cURL — возможно, кому-то пригодиться.



На мой взгляд, работать с протоколами SCP и SFTP в командной строке удобнее через родные утилиты, поэтому я бы в первую очередь порекомендовал изучить «SSH (ч.5): Копирование файлов с помощью scp и sftp» - там подробно описано как пользоваться этими программами.


cURL и SCP


Протокол SCP предназначен в первую очередь для скачивания и закачки файлов. Для скачивания используется команда вида:



curl -k scp://ПОЛЬЗОВАТЕЛЬ@АДРЕСАТ:ПОРТ/ПУТЬ/ДО/ФАЙЛА


Пример команды:



curl -k scp://root@192.168.1.68:22/root/bin/oneshot.py


Файл oneshot.py из папки /root/bin/ будет скачен в текущую рабочую директорию с исходным именем. Чтобы сохранить файл в другое место и/или с другим именем, добавьте опцию -o, --output <ФАЙЛ> - в качестве <ФАЙЛ> укажите путь в локальной системе.



Мы используем опцию -k которая предназначена для разрешения небезопасных соединений, то есть когда невозможно валидировать (проверить) ключи. Ключи для SSH генерируются пользователями, поэтому проверить их с помощью третьей стороны невозможно. При этом данные соединения не стоит считать небезопасными — они такие же, как и при подключении по SSH, то есть надёжные.



Если приватный ключ для подключения находится по другому пути, то используйте опцию --key ~/.ssh/id_rsa. В современных версиях cURL указывать публичный ключ не нужно — программа сама извлечёт его из приватного ключа. Если вход по ключу не настроен, то используйте опцию --user "testuser:testpassword" или -u user.



Для закачки файла на удалённый сервер используйте опцию -T, --upload-file <ФАЙЛ>, где вместо <ФАЙЛ> укажите файл, который нужно выгрузить. Пример команды:



curl -k -T /home/mial/banner.txt scp://root@192.168.1.68:22/root/banner.txt

cURL и SFTP


При работе с протоколом SFTP, также применяются опции:



  • -k (разрешить подключения при неудачной валидации ключа)


  • --key ~/.ssh/id_rsa — указать другое расположение приватного ключа


  • --user "testuser:testpassword" или -u user — на случай если не настроен вход по ключу


  • -T, --upload-file <ФАЙЛ> для указания файла выгрузки


Для листинга списка файлов файлов в директории /root/bin/ пользователя root на хосте 192.168.1.68, порт 22:



curl -k sftp://root@192.168.1.68:22/root/bin/





Другие примеры взяты из инструкции «How to use Curl Command line tool with FTP and SFTP»:



  • Выгрузка используя curl на SFTP


curl -k "sftp://83.46.38.23:22/CurlPutTest/" --user "testuser:testpassword" -T "C:testtestfile.xml" --ftp-create-dirs


  • Загрузка используя curl на SFTP


curl -k "sftp://83.46.38.23:22/CurlPutTest/testfile.xml" --user "testuser:testpassword" -o "C:testtestfile.xml" --ftp-create-dirs


  • Переименование используя curl на SFTP


curl -k "sftp://83.46.38.23:22/CurlPutTest/" --user "testuser:testpassword" -Q "-RENAME '/CurlPutTest/testfile.xml' '/CurlPutTest/testfile.xml.tmp'" --ftp-create-dirs


  • Удаление используя curl на SFTP


curl -k "sftp://83.46.38.23:22/CurlPutTest/" --user "testuser:testpassword" -Q "-RM /CurlPutTest/testfile.xml" --ftp-create-dirs


  • Создание директории используя curl на SFTP


curl -k "sftp://83.46.38.23:22/CurlPutTest/test" --user "testuser:testpassword" -Q "-MKDIR /CurlPutTest/Test" --ftp-create-dirs


  • Удаление директории используя curl на SFTP


curl -k "sftp://83.46.38.23:22/CurlPutTest/test" --user "testuser:testpassword" -Q "-RMDIR /CurlPutTest/Test" --ftp-create-dirs


Как можно догадаться, -Q — это опция для отправки команд на SFTP сервер. Дефис перед командой (префикс) также имеет значение (имеются разные префиксы). Нужно знать, что cURL поддерживает не все команды SFTP — подробности в документации по cURL:



man curl


Опция --ftp-create-dirs означает создать необходимую директорию, если она отсутствует (в противном случае работа cURL завершится ошибкой).


Заключение


Итак, если на сервере (удалённом компьютере) запущен SSH, то не нужно устанавливать какие-либо дополнительные программы чтобы загрузить на него файлы или скачать с него файлы. Можно воспользоваться различными вариантами с удобным графическим интерфейсом, либо утилитами командной строки, которые можно задействовать в скриптах.




Добавить комментарий

Автору будет очень приятно получить обратную связь.

Комментариев 0