SFTP и SSHFS
Продолжаем тему FTP и рассмотрим протокол SFTP.
SFTP
расшифровывается как SSH File Transfer Protocol — SSH-протокол для передачи файлов. Он предназначен для копирования и выполнения других операций с файлами поверх надёжного и безопасного соединения. Как правило, в качестве базового протокола, обеспечивающего соединение, и используется протокол SSH2, но это необязательно.
В сравнении с другим протоколом, тоже предназначенным для копирования файлов поверх SSH — протоколом SCP, который позволяет только копировать файлы, SFTP даёт возможность выполнять намного больше операций с ними: например, докачивать файл после разрыва соединения или удалять файл на сервере и многие другие операции.
Существует заблуждение, что SFTP это просто обычный FTP, работающий поверх SSH. В действительности SFTP — это новый протокол, разработанный с нуля. Ещё его иногда путают с Simple File Transfer Protocol. SFTP расшифровывается как SSH File Transfer Protocol и ничего общего с Simple File Transfer Protocol не имеет.
Сам по себе протокол SFTP не обеспечивает безопасность работы; это делает нижележащий протокол. Как правило, SFTP используется в сочетании с протоколом SSH2 (он даже был разработан той же рабочей группой). Можно использовать SFTP и с другими протоколами, например SSH1, но это сопряжено с дополнительными трудностями.
Сервер SFTP
SFTP-сервер встроен в OpenSSH. Он реализуется с помощью программы sftp-server. Для того чтобы включить sftp-server в sshd, необходимо указать его в конфигурационном файле sshd_config
в качестве подсистемы:
Subsystem sftp /usr/lib/openssh/sftp-server
Как правило, эта строка уже указана в конфигурационном файле sshd по умолчанию, так что SFTP работает сразу и не требует никаких дополнительных действий для включения.
Клиент SFTP
SFTP-клиент sftp встроен в пакет OpenSSH. Пример команд использования клиента SFTP:
sftp user@host:файл1
sftp скачивает файл1 с сервера и записывает его в текущий каталог с под именем файл1
sftp user@host:dir
переводит sftp в интерактивный режим и работа на удалённом сервере начинается с определённого каталога.
В интерактивном режиме команды SFTP клиента похожи на команды FTP: get
, cd
, ls
, mkdir
, put
, pwd
, rm
и пр.
Программа sftp
использует в качестве транспорта ssh, и аутентификация на удалённом сервере выполняется средствами ssh.
В качестве SFTP-клиента для Windows может использоваться WinSCP, PSFTP из пакета PuTTY или кроссплатформенный ftp-клиент Filezilla.
Клиент SSHFS
Использование SFTP можно не только родным клиентом, но и SSHFS, дающим возможность монтировать файловую систему удаленной машины, на которой включен SFTP.
Пример команды монтирования через SSHFS:
sshfs user@host:dir local_mount_point ssh_options
Пример демонтирования:
fusermount -u local_mount_point
Также если вы часто монтируете одну и ту же директорию по SSHFS, ее можно внести в fstab
для автоматического монтирования при включении машины, внеся следующую строку в /etc/fstab
:
user@host:dir local_mount_point fuse.sshfs defaults 0 0
Однако придется каждый раз при попытке монтирования вводить логин и пароль, и чтобы избежать этого, можно настроить авторизацию SSH на основе ключей, которая была описана ранее.
Стоит понимать, что в отличие от NFS/SMB в SSHFS не предустановлено никаких механизмов для контроля доступа к одному файлу нескольких пользователей.