- Установка и настройка SFTP сервера (SSH FTP) в Windows на базе OpenSSH
- Особенности протокола SFTP
- Реализация SFTP в системах Windows
- Установка Win32 OpenSSH в Windows 10 1803+/Windows Server 2019
- Установка Win32 OpenSSH на Windows Server 2016/2012 R2
- Тестируем SFTP подключение с помощью WinSCP
- Удаление службы Win32 OpenSSH
- Как настроить FTP на Windows
- Процесс установки
- О настройках брендмауэра
- О подключениях к FTP
- Как настроить Secure (SFTP)
- Настройка SFTP доступа
- Создание пользователя для SFTP
- Настройка сервера SSH
- Настройка директорий для пользователя SFTP
- Частые ошибки
- Комментарии к статье (9)
Установка и настройка SFTP сервера (SSH FTP) в Windows на базе OpenSSH
С помощью официального пакета OpenSSH для Windows вы можете с легкостью организовать безопасный обмен файлами между клиентом и серверов Windows по защищенному протоколу передачи файлов SFTP (Secure FTP). В этой статье мы покажем, как с помощью Win32-OpenSSH установить SFTP сервер на Windows 10 или Windows Server 2016/2012R2.
Особенности протокола SFTP
Протокол SFTP (Secure File Transfer Protocol , Secure FTP или SSH FTP) это расширение протокола SSH, являющимся стандартом мира UNIX/Linux систем. Хотя с точки зрения пользователей он похож на FTP, но на самом деле это абсолютно другой протокол, не имеющий с FTP ничего общего. Данные между клиентом и сервером передаются по порту 22 через SSH туннель.
Основные преимущества протокола SFTP:
- Передача файлов и команд происходит внутри защищенной SSH-сессии;
- Для передачи файлов и команд используется одно соединение;
- Поддержка символических ссылок, функций прерывания, возобновления передачи, удаления файла и пр;
- Как правило, на каналах, где FTP работает медленно или с перебоем, SFTP-соединение работает более надежно и быстро;
- Возможность аутентификации с помощью SSH ключей.
Реализация SFTP в системах Windows
Исторически в операционных системах Windows отсутствуют встроенные средства для организации защищенного SFTP сервера. Для этих целей обычно использовались открытые или коммерческие решения, к примеру, Core FTP, FileZilla, CYGWIN, OpenSSH, FTP Shell, IPSwitch и пр. Однако несколько лет назад Microsoft выпустила свою версию порта OpenSSH для win32. Данный проект называется Win32-OpenSSH.
Рассмотрим процесс настройки SFTP сервера в Windows 10 и Windows Server 2016/2012 R2 с помощью пакета Win32-OpenSSH.
Установка Win32 OpenSSH в Windows 10 1803+/Windows Server 2019
В Windows 10, начиная с билда 1803, и в Windows Server 2019 пакет OpenSSH (как и RSAT) уже включен в операционную систему в виде Feature on Demand (FoD).
В Windows 10 и Windows Server 2019 вы можете установить сервер OpenSSH с помощью командлета PowerShell:
Add-WindowsCapability -Online -Name OpenSSH.Server*
Или с помощью DISM:
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server
Или можно установить OpenSSH из графического интерфейса Windows 10 (Settings -> Apps -> Optional Features -> Add a feature -> Open SSH Server -> Install).
Исполняемые файлы OpenSSH находятся в каталоге:
Конфигурационный файл sshd_config находится в каталоге C:\ProgramData\ssh (каталог создается после первого запуска службы).
Файл authorized_keys и ключи хранятся в каталоге %USERPROFILE%\.ssh\.
Установка Win32 OpenSSH на Windows Server 2016/2012 R2
В предыдущих версиях Windows 10 и в Windows Server 2016/2012 R2 вы должны скачать и установить OpenSSH с GitHub (https://github.com/PowerShell/Win32-OpenSSH/releases). Нам нужна версия для 64 битной версии Windows: OpenSSH-Win64.zip (3,5 Мб).
- Распаковываем содержимое архива в целевой каталог, к примеру: C:\OpenSSH-Win
- Запускаем командную строку PowerShell с правами администратора и переходим в каталог OpenSSH: Cd C:\OpenSSH-Win
- Добавьте путь к каталогу OpenSSH в переменную окружения Path;
- Установите сервер OpenSSH: .\install-sshd.ps1 (должно появиться зеленое сообщение “sshd and ssh-agent services successfully installed”);
- Сгенерируйте SSH ключи для сервера (нужны для запуска службы sshd): ssh-keygen.exe –A
, убедитесь, что создан каталог %programdata%\ssh.
Тестируем SFTP подключение с помощью WinSCP
Попробуем подключиться к поднятому нами SSH серверу по протоколу SFTP. Для этих целей воспользуемся свободным клиентом WinSCP.
В окне настройки подключения выберите протокол передачи файлов SFTP, укажите имя сервера и данные учетной записи Windows, под которой осуществляется подключение (возможно также настроить авторизацию по ключам).При первом подключении появится окно с предупреждением о том, что ключ хоста отсутствует в локальном кеше.
Если все настроено правильно, клиент должен подключиться к SFTP серверу и отобразить список файлов в домашнем каталоге пользователя (по умолчанию каталог с профилем пользователя).
С помощью привычного интерфейса файлового менеджера можно безопасно копировать файлы между сервером и клиентом. Передача файлов будет осуществляться по защищённому протоколу SFTP.
Удаление службы Win32 OpenSSH
Чтобы корректно удалить службу Win32 OpenSSH из системы:
- Откроем консоль Powershell с правами администратора
- Остановим службу SSHD: Stop-Service sshd
- Удалим службу OpenSSD:Удалим ключи: .\uninstall-sshlsa.ps1
Как настроить FTP на Windows
Ниже мы детально рассмотрим рекомендации про серверную настройку, работу брендмауэра, способы подключения и протокол Secure (SFTP) на ОС Win Server2012.
FTP выступает в качестве общепринятого протокола, он передает файл с компьютера на сервер или обратно на ПК. С его помощью пользователь может работать с другими машинами в интернете, обмениваться данными с локальными устройствами и удаленным сервером, пользоваться облачными архивами ПО.
Мы расскажем об инсталляции FTP на любой из серверов IIS. Также для работы допускается использование других программ, в том числе: FileZilla, Home, Titan или Ocean FTP Server.
Процесс установки
Для начала нужно зайти в «Пуск» и войти в «Диспетчер серверов», в нем необходимо выбрать добавление роли (пункт два).
Затем зайти на вкладку «Тип установки» и кликнуть на первую категорию.
В рамке с пулами появится список серверов, надо кликнуть по нужному и щелкнуть «Далее».
В подменю серверных ролей нужно поставить галочку для сервера IIS. После этого графа развернется и представит новые настройки: здесь потребуется кликнуть на FTP. Внимание: иные версии перенесли строку «FTP-сервер» на другие вкладки.
Затем потребуется нажать и одобрить установку.
Раскройте диспетчер IIS и слева в подменю есть папка «Сайты». Если кликнуть по ней правой кнопкой мышки, всплывет подсказка. В ней следует щелкнуть на «Добавить FTP».
Следующий шаг: потребуется ввести имя нужного сайта и его полный путь к каталогу хранения.
В окне появится запрос на выбор айпи-адреса. Нужно проверить, чтобы введенный айпишник был одинаковым с тем, что значится в панели управления. Желательно выбрать еще функцию автоматического запуска, расположенной ниже, и в ней «Без SSL».
Проверять подлинность будем обычным способом, доступы разрешаются каждому юзеру. Также рекомендуем выбрать все предложенные разрешения.
О настройках брендмауэра
Чтобы внешние подключения происходили быстро и гладко, потребуется настроить файервол – это проводится через приложение брендмауэра. Его следует запускать с режимом повышенной безопасности. После открытия в левом подменю нужно найти графу с правилами для входящих подключений, а в правой части кликнуть по созданию новых правил.
В «Мастер создания» выбирается предопределенный тип правил, ему указывается правило FTP из выпадающего подменю.
В подменю предопределенных правил рекомендуем поставить галочки во всех строках.
В подменю «Действие» необходимо разрешить подключения (первая строка). Настройка закончилась, она войдет в работу как только перезагрузится сервер.
О подключениях к FTP
Провести подключение возможно посредством базовой виндовской программы («Проводника») либо при помощи специальных программ, например, FileZilla.
Подключаясь по методу «Проводник», в адресную строчку вводится:
К примеру, ftp://177.118.25.63
Всплывет окно, в него вводится информация: выбирается существующий юзер и указывается пароль.
Внимание: при помощи сервера IIS возможно проводить гибкие подключения к серверам. В том числе разделить видимое пространство различным клиентам, редактировать их права, давать анонимный доступ.
В случае удачно проведенных действий откроется окно с папками, расположенными на сервере.
Внимание: встроенные сервера имеют богатые возможности. В том числе позволяют вести журнал, изолировать юзеров, поддерживать SSL, ограничивать число попыток входа.
Как настроить Secure (SFTP)
подразделяются на два типа: заверенные официальной комиссией и самоподписанные. Первый тип считается безопасным, так как за надежность заверяется центром, отвечающим за сертификацию.
Если брать самозаверенные сертификаты, тогда юзеры при желании зайти на сервер будут получать предупреждения.
Начать работу с самозаверенным сертификатом просто:
1. Нужно зайти в окно диспетчера IIS и выбрать параметр «Сертификаты».
2. В правой подменю необходимо выбрать создание самоподписанного типа.
3. Ввести его название.
Чтобы настроить SFTP потребуется вернуться к начальной странице (кликнуть по FTP в левом подменю) и открыть параметры, как на скриншоте.
Открывшееся окно предложить сделать выбор политики – укажите второй вариант с требованиями SSL-соединений.
Чтобы произвести подключения по защищенному каналу, понадобится программа WinSCP:
• Протоколом должен выступить FTP;
• В качестве шифрования из выпадающего меню выбирается «Явное»;
• Именем хосту будет служить айпи или доен;
• Если не было настроек других портов, нужно выбирать 21-й;
• Последними указываются логин и пароль.
После входа появится все, что содержит FTP-каталог.
Настройка SFTP доступа
Если по какой-то причине потребовалось дать удаленный доступ к файлам на компьютер под управлением операционной системы из семейства Linux, то безопаснее всего будет это сделать через SFTP. SFTP обозначает SSH File Transfer Protocol, и не имеет никакого отношения к обычному FTP протоколу, а так же в разы безопаснее. Однако, приступим к настройке.
Создание пользователя для SFTP
Создаем нового пользователя:
-m — указывает необходимость создать домашнюю директорию пользователя в каталоге /home;
-s — задает оболочку пользователя — /sbin/nologin запрещает пользователю использовать shell.
crazyadmin — имя пользователя
Устанавливаем созданному пользователю пароль:
Если что-то пошло не так, то всегда можно удалить пользователя командой userdel username, например:
И создадим для нового пользователя папку chroot, о её предназначении будет рассказано ниже.
Настройка сервера SSH
Теперь отправляемся в конфиг SSH — /etc/ssh/sshd_config
Ищем следующую строчку:
Теперь отправляемся в самый конец конфига, и там дописываем:
ChrootDirectory — родительский каталог той папки, к которой мы хотим открыть доступ по SFTP. В данном примере используется директория chroot, которая лежит в папке пользователя.
Если на вашем сервере настроен доступ по SSH только через файл ключа, а нужно сделать возможность заходить по паролю, то тогда дописываем еще следующее:
После завершения всех манипуляций с SSH сервером, его нужно перезагрузить:
Настройка директорий для пользователя SFTP
Отправляемся в директорию /home и там ищем папку свежесозданного пользователя, а в ней папку chroot. Устанавливаем её владельцем пользователя root:
Устанавливаем нужные права на папку:
Теперь представим, что нам нужно предоставить доступ к нескольким папкам, и они все лежат за пределами ChrootDirectory. Выход из ситуации следующий:
Допустим нам нужно разрешить доступ к папке /var/www/sysadmin.ru. Создаем в домашнем каталоге пользотвателя /home/crazyadmin папку с названием sysadmin.ru.
Теперь смонтируем в эту папку ту директорию, доступ к которой нам нужно обеспечить:
Выставляем необходимые для редактирования права для нашей директории /var/www/sysadmin.ru:
Если в процессе монтирования директории что-то пошло не так, то можно убрать монтирование командой unmount:
На этом настройка SFTP сервера завершена.
Частые ошибки
- fatal: bad ownership or modes for chroot directory component — как писалось выше, данная ошибка появляется тогда, когда владельцем ChrootDirectory является не пользователь root, и права не равны 755.
- No supported authentication methods available (server sent public key) — сервер настроен на авторизацию по ключу. Если нужна авторизация по паролю, то в конфиге /etc/ssh/sshd_config нужно поменять значение у переменной PasswordAuthentication с no на yes, а после перезапустить сервер командой service ssh restart.
Была ли эта статья Вам полезна?
Комментарии к статье (9)
-
- Sergey
- 30.07.2019 21:54
Такая же ошибка как у Сергея, под crazyadmin не хочет подключатся, а под root сразу заходит.
Команда: open «crazyadmin@192.168.1.50» 22
Команда: Pass: *****
Ошибка: Network error: Software caused connection abort
Ошибка: Невозможно подключиться к серверу
Статус: Отключен от сервера
Статус: Соединяюсь с 192.168.1.50.
Статус: Connected to 192.168.1.50
Статус: Получение списка каталогов.
Статус: Listing directory /root
Статус: Список каталогов «/root» извлечен
OpenSSH сервер обновлен, Iptables и антивирус отключены. Проверял на FileZilla и на WinSCP.
Статья видимо утратила актуальность, либо подходит для конкретного дистрибутива.
Мне нужно было на oracle linux настроить и начал с этой статьи, в итоге мучался с тем как всё исправить потом.
Так вот. Более толково написано здесь https://wiki.enchtex.info/howto/ssh_sftp.
Проверенно:
— юзера нужно делать командой useradd -d /dev/null -M -s /bin/bash user
Иначе ssh не работает для него нормально. Если Вы накуралесили как я, то поможет команда usermod -s /bin/bash user (вместо user имя Вашего пользователя).
— команда рестарта ssh для Oracle Linux имеет вид service sshd restart
— Чтобы можно было подключиться через winscp Вашим пользователем — нужно в файл /etc/ssh/sshd_config вписать как указано ниже слово в слово. Даже если имя пользователя другое — строка «Match User user» должна быть без изменений (получено методом ошибок).
Subsystem sftp internal-sftp
Match User user
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
ForceCommand internal-sftp
ChrootDirectory /home
Если домашний каталог пользователя указать в /dev/null, то невозможно будет сделать авторизацию по ключам, так как негде будет их хранить. Все прекрасно работает и любой нормальном папкой в качестве домашнего каталога, важно чтобы владелец его был root:root и права записи были только у него (750 или 755 на ваш выбор).
При подключении вот такое в filezilla:
Статус: Соединяюсь с xxx.
Ответ: fzSftp started, protocol_version=8
Команда: open «dmitry@xxx» 22
Команда: Pass: **********
Ошибка: Server unexpectedly closed network connection
Ошибка: Невозможно подключиться к серверу
На ум приходит несколько вариантов:
- Старая версия OpenSSH сервера, попробуйте узнать её с помощью команды sshd -V . Если версия ниже 6.3p1, то вам нужно обновить OpenSSH сервер.
- Что-то обрывает связь между Вами и сервером (антивирус, фаирволл у клиента или сервера).
Сделал все, как в статье. Но на команду service ssh restart Shell реагирует
Redirecting to /bin/systemctl start ssh.service
Failed to start ssh.service: Unit not found.
И пользователь через WinSCP не может пробиться. И Выдает:
Authentication log (see session log for details):
Using username «userSFTP».
Authentication failed.
The server rejected SFTP connection, but it listens for FTP connections.
Did you want to use FTP protocol instead of SFTP? Prefer using encryption.
Причем, пользователь root заходит без проблем.
По поводу не рабочей команды service ssh restart — какой у вас дистрибютив Linux? Попробуйте команду systemctl restart ssh .
По поводу авторизации — а Вы уверены, что у вас пользователь действительно зовется userSFTP? По умолчанию, Linux не дает использовать заглавные буквы в имени пользователя, убедитесь в правильности его имени и вообще существования в системе.
Ребята, подскажите пожалуйста в чем может быть проблема.
Конфигурация:
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 1024
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp internal-sftp
Match User testuser
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
ForceCommand internal-sftp
ChrootDirectory %h/chroot
(/home/testuser — root:root; /home/testuser/chroot — testuser:testuser)
1. В параметре MatchUser — работает, только если указывать группу, а не пользователя. Если прописывать параметр MatchGroup — то не работает.
2. При подключении вижу все корневые папки.
В логах есть что-нибудь, какие-нибудь ошибки?
И как минимум я вижу, что у /home/testuser владельцем должен быть testuser, а у /home/testuser/chroot владельцем должен быть root:root.