Графический интерфейс 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, то не нужно устанавливать какие-либо дополнительные программы чтобы загрузить на него файлы или скачать с него файлы. Можно воспользоваться различными вариантами с удобным графическим интерфейсом, либо утилитами командной строки, которые можно задействовать в скриптах.
Связанные статьи:
- LibreOffice открывает sftp соединение (РЕШЕНО) (70.4%)
- Как исправить «No route to host» SSH в Linux (РЕШЕНО) (55.9%)
- Как сервер TigerVNC сделать доступным из вне. Как подключиться к серверу TigerVNC через SSH туннель (55.9%)
- Как конвертировать ключи SSH из формата PuTTY в формат OpenSSH (55.9%)
- PHP cURL как установить значение User Agent ИЛИ как сделать так, чтобы сервера не блокировали запросы cURL? (55.1%)
- Как установить dnscrypt-proxy в Kali Linux (RANDOM - 50%)
>SFTP в Double Commander
Плагин для GVFS давно не нужен. Double Commander начиная с версии 0.7 умеет встроенную поддержку GVFS - достаточно вверси адрес, кликнув правой кнопкой мыши по строке над панелью. Также, плагин FTP у версии 0.9 поддерживает sftp/
Приветствую! Спасибо за дополнение, но у меня способ со строкой над панелью работает только если в 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://
Спасибо за статью!Очень выручили, особенно за пометку о FileZilla!