Sftp сервер для windows настройка

Решено: Как создать сервер SFTP?

Приветствую всех, сегодня увидел вопрос о том как можно создать свой сервер SFTP. Задача была следующая, у программиста была клиентская часть написанная на C#, и он искал возможность того как можно создать свой сервер. Ранее я не работал с SFTP и в моих задачах я использовал только FTP. Начнем с того в чем разница между FTP и SFTP.

FTPFile Transfer Protocol (протокол передачи файлов) который основан на сессиях работы, с аутентификацией пользователя, имеет возможность операциями над файлами(создание, удаление, переименование). Основным недостатком FTP является не защищенность данных, и осуществляется передача в открытом виде, благодаря чему злоумышленник может осуществить перехват данных. По умолчанию для FTP открыть порт 21.

SFTP (SSH FTP)- это протокол прикладного уровня для передачи файлов, который работает поверх безопасного канала, его не следует путать с «Simple File Transfer Protocol», имеющего такую же аббревиатуру. Если FTPS является просто расширением FTP, то SFTP это отдельный и никак не связанный с FTP протокол, который снабжен SSH (Secure Shell — безопасная оболочка).

FTPS (FTP + SSL) — фактически это расширение стандартного протокола передачи файлов, которое обеспечено криптографическим протоколом SSL (Secure Sockets Layer — уровень защищенных сокетов). На сегодняшний день более передовым его аналогом является TLS (Transport Layer Security — защита транспортного уровня).

Главное, в чем заключается его отличие от стандартного FTP и SFTP, это то, что SFTP шифрует абсолютно все команды, имена пользователей, пароли и другую конфиденциальную информацию. Если на сервере имеется поддержка SFTP протоколом, то клиенты клиенты FTP (FTPS) не могут соединиться.

Подключение к таким серверам осуществляется с помощью FTP client в котором необходимо произвести начальные настройки, логин, пароль, порт и адрес сервера.

Перейдем к основной составляющей статьи, как же все таки создать свой SFTP сервер.

Допустим мы имеет одну из версий OS Windows Server. Для этого нам необходимо установить FreeSSHd и произвести следующие настройки ссылка.

Остается дело за малым добавить порт к примеру 22 и настроить брандмауэр соответствующим образом.

Вот на этом и все, остается только взять к примеру один из самых популярных клиентов FileZilla и попробовать соединиться с сервером убедившийся в его работе.

Настройка 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.

    Установка OpenSSH Server в Windows Server 2012 R2

    Если вам понадобился SFTP/SSH сервер на Windows Server 2012 R2, то вы попали по адресу. Установим, запустим, настроим и протестируем OpenSSH Server в Windows Server 2012 R2.

    Установка OpenSSH в Windows Server 2012 R2

    Скачиваем последнюю версию дистрибутива OpenSSH:

    Сейчас доступна версия v8.0.0.0p1-Beta. Скачиваю OpenSSH-Win64.zip.

    Создаю директорию C:\Program Files\OpenSSH, распаковываю в неё содержимое архива.

    Запускаю powershell от имени администратора.

    Выполняю скрипт установки:

    sshd and ssh-agent services successfully installed

    Если произошла ошибка политики безопасности, то можно выполнить установку так:

    В результате вижу ошибку:

    Исправляется легко, захожу в папку C:\ProgramData и создаю вручную директорию «ssh».

    Снова пытаюсь сгенерировать ключи:

    На этот раз процедура выполняется успешно.

    Настраиваю владельца файлов и права доступа:

    На каждый вопрос отвечаю «A».

    Открыть 22 порт

    OpenSSH работает по порту TCP 22. Открою доступ в Firewall:

    То же самое можно сделать через GUI в оснастке Windows Firewall with Advanced Security.

    Запуск службы OpenSSH

    Открываю список служб:

    Нахожу службу «OpenSSH SSH Server». В свойствах службы делаю автоматический запуск и запускаю её.

    Проверим что 22 порт работает:

    22 порт слушается.

    Проверка OpenSSH

    Проверю с помощью WinSCP. Для доменного пользователя используется логин вида domain\username.

    При первом входе появится окно:

    Настройка доступа

    Конфигурационный файл находится здесь: C:\ProgramData\ssh\sshd_config.

    Собственно, OpenSSH конфигурируется здесь. Например, чтобы разрешить доступ по OpenSSH определённой группе пользователей, допишу в конец файла:

    Читайте также:  Как узнать что windows пиратская
Оцените статью