SFTP. Простой и безопасный способ загрузить и скачать файл с сервера.

Очень часто есть необходимость загрузить или скачать файл с сервера. Как раз для этого есть очень простой и безопасный способ. Мы будем использовать протокол SFTP и пакет OpenSSH который скорей всего у вас уже стоит на сервере.

SFTP (англ.SSH File Transfer Protocol) — протокол прикладного уровня, предназначенный для копирования и выполнения других операций с файлами поверх надёжного и безопасного соединения. Протокол разработан группой IETF как расширение к SSH-2, однако SFTP допускает реализацию и с использованием иных протоколов сеансового уровня. Протокол предполагает, что он работает поверх установленного безопасного канала, что сервер уже аутентифицировал клиента и что идентификатор клиента доступен протоколу. Сервер SFTP обычно использует порт 22.

Настройка OpenSSH.

Первым делом мы настроим сервер ssh для поддержки sftp. Откроем файл настройки /etc/ssh/sshd_conf  и добавим туда если нету новые опции :

Subsystem sftp /usr/libexec/openssh/sftp-server

Далее надо добавить флок Match ( User, Group, Host, LocalAddress, LocalPort, Address) Опция match определяет шаблон критериев, согласно которому будут применяться или не применяться остальные параметры. Опция Match содержит пары «ключ-значение». Она может использовать ключи User, Group, Host, Address. Их можно отделить друг от друга пробелами.

 Match User root
X11Forwarding no #Запретить графическую передачу интерфейса
AllowTcpForwarding no #Запретить фарвординг TCP
AllowAgentForwarding no # Указывает, будет ли SSH-агенту переадресация разрешена.
PermitTunnel no #Specifies whether tun device forwarding is allowed. The argument must be yes, point-to-point , ethernet , or no.

sshd по умолчанию не логгирует sftp Match User root
X11Forwarding no #Запретить графическую передачу интерфейса
AllowTcpForwarding no #Запретить фарвординг TCP
AllowAgentForwarding no # Указывает, будет ли SSH-агенту переадресация разрешена.
PermitTunnel no #Specifies whether tun device forwarding is allowed. The argument must be yes, point-to-point , ethernet , or no.

Все , перезагружаем сервер sshd.

sshd по умолчанию не логирует sftp , но если требуется такая функция просто допишем к вызову sftp -l INFO

 Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO 

В логе /var/log/auth.log у нас будут такие записи:

Клиент для Windows.

Для работы с SSH есть очень популярный пакет утилит putty. А в нем уже SFTP клиент — psftp.exe .  Запускаем его из cmd.

Вводим команду open root@ip_host.name и вводим пароль пользователя.

Вот мы и в шелл оболочке sftp. Самая главная команда конечно help или ?

Ну и конечно самое главное, загрузка и скачивание файлов :

get file_name #Скачать файл
get /path/file_name
put filename # Загрузить файл
put /path/filename

Chroot.

chroot — операция изменения корневого каталога в Unix-подобных операционных системах. Программа, запущенная с изменённым корневым каталогом, будет иметь доступ только к файлам, содержащимся в данном каталоге.

Что бы настроить sftp с опцией chroot нам надо будет создать пользователя и изменить конфиг sshd :

Subsystem sftp internal-sftp 
Match User test
X11Forwarding no #Запретить графическую передачу интерфейса
AllowTcpForwarding no #Запретить фарвординг TCP
AllowAgentForwarding no # Указывает, будет ли SSH-агенту переадресация разрешена.
PermitTunnel no #Specifies whether tun device forwarding is allowed. The argument must be yes, point-to-point , ethernet , or no.
####
ForceCommand internal-sftp
ChrootDirectory /home