zaLinux.ru

Как скачивать файлы по 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:

Можно нажать <Quick connection> и ввести уже знакомый нам URI (если честно, мне просто лень расписывать данные по полям):


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

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

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

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

Прямо в URI можно указывать папку, которая должна быть открыта после подключения. Предположим, я хочу, чтобы открывалась папка /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:\test\testfile.xml" --ftp-create-dirs
  • Загрузка используя curl на SFTP
curl -k "sftp://83.46.38.23:22/CurlPutTest/testfile.xml" --user "testuser:testpassword" -o "C:\test\testfile.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, то не нужно устанавливать какие-либо дополнительные программы чтобы загрузить на него файлы или скачать с него файлы. Можно воспользоваться различными вариантами с удобным графическим интерфейсом, либо утилитами командной строки, которые можно задействовать в скриптах.


Рекомендуемые статьи:

3 Комментарии

  1. Andry

    >SFTP в Double Commander

    Плагин для GVFS давно не нужен. Double Commander начиная с версии 0.7 умеет встроенную поддержку GVFS - достаточно вверси адрес, кликнув правой кнопкой мыши по строке над панелью. Также, плагин FTP у версии 0.9 поддерживает sftp/

    1. Alexey (Автор записи)

      Приветствую! Спасибо за дополнение, но у меня способ со строкой над панелью работает только если в Double Commander предварительно установлен плагин gvfs. Например, в Linux у меня этот плагин установлен и я могу перейти по ссылке sftp://root@157.245.118.66:2222/root, а в Windows, где у Double Commander не установлен gvfs, появляется ошибка «Переход в каталог sftp://root@157.245.118.66:2222/root не удался».

      Что касается плагина FTP, то в обеих ОС у меня не получается подключиться по протоколу sftp://

  2. Viktor

    Спасибо за статью!Очень выручили, особенно за пометку о FileZilla!

Добавить комментарий для Alexey Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *