Продолжая тему интеграции систем на базе Linux в доменную инфраструктуру Active Directory (AD), в этой заметке мы рассмотрим вопрос настройки Single sign-on (SSO) при подключении к Linux-серверу на базе Ubuntu Server 14.04 LTS по протоколу SSH с клиентских компьютеров под управлением Windows. Начнём с настроек на стороне Linux-сервера, который будет выступать в качестве сервера SSH на базе пакета OpenSSH (описание установки и базовой настройки рассмотрено ранее).
Как включить сервер OpenSSH в Windows
- Откройте приложение «Параметры» и перейдите в «Приложения» → «Приложения и возможности».
- Справа нажмите «Управление дополнительными компонентами».
- На следующей странице нажмите кнопку «Добавить компонент».
- В списке компонентов выберите OpenSSH Server и нажмите кнопку «Установить», это установит программное обеспечение OpenSSH Server в Windows 10
- Перезагрузите Windows 10.
Также вы можете установить клиент SSH с помощью PowerShell.
Откройте PowerShell от имени Администратора и выполните следующую команду и перезагрузите систему:
Get-WindowsCapability -Online | Where-Object{$_.Name -like “*”}
Файлы OpenSSH Server находятся в папке c:\windows\system32\Openssh. Помимо клиентских приложений SSH, папка содержит следующие серверные инструменты:
- конфигурационный файл «sshd_config».
Сервер SSH настроен для работы в качестве службы.
На момент написания этой статьи он не запускается автоматически. Вам нужно включить его вручную.
Как запустить сервер OpenSSH в Windows 10.
- Откройте Службы, (нажмите клавиши Win + R и введите в поле «Выполнить») и запустите службу sshd. дважды кликните на запись sshd, чтобы открыть ее свойства.
- На вкладке «Вход в систему» см. Учетную запись пользователя, которая используется сервером sshd. В моем случае это NT Service \ sshd
- Теперь откройте командную строку или PowerShell от имени администратора .
С помощью этой команды перейдите в каталог \ Openssh
cd c:\windows\system32\Openssh
- Здесь запустите команду для создания ключей безопасности для сервера sshd:
ssh-keygen -A
Сервер Sshd сгенерирует ключи
- Теперь в командной строке введите: , чтобы запустить Проводник в папке OpenSSH.
- SSH FTP …
- SSH FTP …
- an SFTP server in Windows using OpenSSH …
- Кликните правой кнопкой мыши файл ssh_host_ed25519_key и измените владельца файла на пользователя службы sshd, например NT Service\sshd.
- Нажмите кнопку «Добавить» и добавьте разрешение «Чтение» для пользователя «NT Service\sshd».
- Теперь удалите все другие разрешения, чтобы получить что-то вроде этого:
- Нажмите «Применить» и подтвердите операцию.
- Наконец, откройте службы (нажмите клавиши Win + R и введите в поле «Выполнить») и запустите службу sshd. Она должна запустится:
Служба Sshd работает.
- Теперь необходимо разрешить использование SSH-порта в брандмауэре Windows. По умолчанию сервер использует порт 22. Запустите эту команду в командной строке или PowerShell от имени администратора:
netsh advfirewall firewall add rule name=»SSHD Port» dir=in action=allow protocol=TCP localport=22
- Наконец, установите пароль для своей учетной записи пользователя, если у вас его нет.
Теперь вы можете попробовать его в действии.
Подключение к SSH-серверу в Windows 10.
Откройте свой ssh-клиент. Вы можете запустить его на том же компьютере, например, используя встроенный клиент OpenSSH или запустить его с другого компьютера в своей сети.
В общем случае синтаксис для клиента консоли OpenSSH выглядит следующим образом:
Имя пользователя ssh @ host -p
В моем случае команда выглядит следующим образом:
Где alex_ — мое имя пользователя Windows, а — это IP-адрес моего ПК с Windows 10. Я подключусь к нему с другого компьютера, Windows 10.
Вход.
Сервер запускает классические консольные команды Windows, например: more, type, ver, copy.
Но я не могу запустить FAR Manager. Он выглядит совсем сломанным:
Еще одно интересное примечание: вы можете запускать приложения с графическим интерфейсом, такие как проводник. Если вы вошли в ту же учетную запись пользователя, которую используете для SSH, они будут запускаться на рабочем столе:
Встроенный SSH-сервер определенно интересен. Он позволяет управлять компьютером сWindows 10, без установки сторонних инструментов, как rdesktop и др..
Начиная с этой версии, встроенный SSH-сервер в Windows 10 находится на стадии BETA, поэтому в будущем он должен стать, более интересным и полезным.
Сервер SFTP
Сервер SFTP встроен в OpenSSH. Он реализуется с помощью программы sftp-server. Для того чтобы включить sftp-server в sshd, необходимо указать его в конфигурационном файле sshd_config в качестве подсистемы:
Как правило, это строка уже указана в конфигурационном файле sshd по умолчанию, так что SFTP работает сразу и не требует никаких дополнительных действий для включения.
Настройка ChrootDirectory в SFTP для пользователей корпоративного Website Hosting (веб хостинг).
А вот группу-владельца chroot-папки можно задать любую.
Расшифровка параметров sshd_config
Готовим серверную часть
Простые вещи вроде настройки RDP или SSH-сервера мы рассматривать не будем. Инструкций в интернете имеется тьма, а у нас объем ограничен, да и перегружать статью не хочется. Также я не стану подробно рассказывать, как реализовать получение данных с Kerio Control: на странице проекта можно найти готовый код.
Первым делом нам нужно разрешить RDP-подключения на клиентских машинах в локальной сети. Если там реализовано централизованное управление типа Active Directory, тебе повезло. Разрешаем подключение к RDP в групповых политиках. Если нет, обходим рабочие места ногами и разрешаем на целевых локальных машинах RDP. Не забываем и о файрволах.
Вторым шагом нам понадобится доступный из интернета SSH-сервер. Технически подойдет любое решение. Я использовал VPS с Debian 10 (один мой знакомый поднимал такой сервак даже на роутере, что небезопасно). Дальше стоит разделить решения на несколько версий, конкретная реализация зависит от того, как организовано получение данных для авторизации пользователей.
Первоначально у нас использовался Kerio с авторизацией пользователей через AD.
Схема подключения
Клиент подключался по SSH, пробрасывал порт на API Kerio Control Server, затем подключался к нему, выполнял поиск по заданным параметрам (логин или фамилия сотрудника), искал IP локального ПК. Далее разрывал SSH-соединение и устанавливал новое уже с пробросом порта на найденный IP, на порт RDP (3389), после чего штатными средствами Windows поднималась сессия RDP с передачей параметров подключения.

Такое решение работало довольно быстро, но нам этого стало мало, и мы разделили его на две части. Серверный скрипт стал работать на SSH-сервере и сам время от времени ходить в Kerio за информацией. Клиентская часть подключалась к серверу по SFTP, искала нужные данные, оформленные в JSON, и выполняла подключение. В итоге скорость работы увеличилась.
Рекомендую сразу настроить сервер OpenSSH с доступом по ключам и подготовить RSA-ключи для авторизации. Для этого нужно создать отдельного пользователя и ограничить его в правах, затем отдать ему публичную часть ключа. Ниже приведу часть /etc/ssh/sshd_config с настройками этих двух пользователей:
Match User sftp PubkeyAuthentication yes # PasswordAuthentication yes ChrootDirectory /srv/sftp ForceCommand internal—sftp AllowTcpForwarding noMatch User user1 X11Forwarding no ForceCommand /usr/bin/cmatrix # Подойдет и любая другая заглушка (можно заморочиться и отправлять пользователя в песочный bash) PasswordAuthentication yes
Первому пользователю SFTP разрешено подключаться только к этому самому SFTP. Второму — лишь для проброса портов. Если у тебя используется Kerio для получения данных о пользователях, Active Directory или еще что‑то централизованное, рекомендую завести отдельную учетку и ограничить ее в правах на всякий случай.
Лучшие бесплатные серверы SFTP и FTPS для Linux
- MySecureShell
- vsftp
- ProFTPd
- PureFTPD
- VandDyke VShell
Поскольку SFTP работает на SSH, большинство дистрибутивов Linux обладают предустановленным SFTP. Другая история с FTPS, здесь требуется выделенный сервер FTP и поддержка TLS. Поскольку на Linux настроить SFTP так легко, нет смысла пользоваться FTPS.
Применение OpenSSH
На стандартной системе Linux большинство пользователей могут применять любой клиент SFTP для подключения к серверу и передачи файлов в домашнюю папку и из неё. Однако, разрешение дистанционного доступа обычно считается риском для безопасности, поэтому многие системные администраторы запрещают его. Проще всего это сделать при помощи запрета на доступ к оболочке или блокировки порта SFTP (22, как и у SSH) определённых IP-адресов.

Если таких ограничений нет, любой клиент SFTP может подключиться к порту 22 и сервер SFTP будет работать без проблем.
$ sftp [email protected] [email protected]’s password: Connected to sftp> pwd Remote working directory: /home/test-sftp sftp>
14. MySecureShell
Недостаток простоты настройки SFTP на большинстве дистрибутивов Linux заключается в том, что SSH доступно для применения. Это требует определённого уровня доверия к пользователям, которое не всегда есть. Если у вас есть неизвестные или ненадёжные пользователи SFTP, вы можете наложить ограничения на их доступ к системе. Для этого есть много методов, вроде возможности запуска движка SFTP при отключении обычных логинов SSH. Или можно использовать приложение вроде MySecureShell.
MySecureShell поддерживает список контроля доступа, что определяет наличие или отсутствие доступа у разных пользователей. Программа содержится в репозиториях многих дистрибутивов, можно использовать менеджер пакетов для установки:
$ sudo apt-get install mysecureshell [sudo] password for jdw: Reading package lists… Done Building dependency tree Reading state information… Done The following NEW packages will be installed: mysecureshell
После установки требуются некоторые изменения в файле конфигурации по адресу /etc/ssh/sftp_config и после этого можно начинать работать.
15. vsftp

Vsftp представляет собой бесплатный сервис FTP для Unix-подобных систем, включая Linux. Он известен как очень быстрый, стабильный и расходующий мало системных ресурсов. Богатый список функциональных возможностей включает поддержку виртуальных пользователей, прослушивание любого интерфейса, настройку под каждого пользователя отдельно и троттлинг для предотвращения DOS-атак.
Многие популярные дистрибутивы Linux используют vsftp как свой сервер FTP, что говорит о его стабильности и защищённости. Поблагодарить за это стоит поддерживающего приложение Криса Эванса, который самостоятельно находил уязвимости безопасности.
Vsftp есть во многих дистрибутивах Linux и может быть установлен через менеджер пакетов.
$ sudo apt-get install vsftpd Reading package lists… Done Building dependency tree Reading state information… Done The following NEW packages will be installed: vsftpd
Как и в случае с большинством инструментов Linux, необходим быстрый запуск через файл /etc/ для задания некоторых базовых настроек, после чего можно начинать работу с сервером vsftp.
16. Настройка ProFTPd для использования SFTP
ProFTP разработан с нуля для замены wu-ftp в качестве широко применяемого сервера FTP. Wu-ftp стал неудобен после многих лет модификаций, из-за которых его нельзя было назвать защищённым. Пришлось создавать клиент FTP с нуля.
ProFTP вдохновлён веб-сервером Apache. Это можно увидеть по формату файлов конфигурации и по тому, что для расширения функциональности загружаются модули. Нужно использовать ProFTP с загруженным модулем mod_sftp, чтобы получить функциональность SFTP.

Сайт ProFTP содержит примеры конфигураций для начала работы.
FTP остается важной частью инструментов интернета, хотя здесь и не хватает защищённости. Как протокол HTTP получил поддержку TLS и превратился в HTTPS, так и FTP объединил TLS и SSH для обеспечения защиты и шифрования. Мало какие другие инструменты способны обеспечить простую передачу крупных файлов. Многие организации ещё долго будут продолжать пользоваться SFTP или FTPS.
17. PureFTPD
PureFTPD представляет собой открытый сервер SFTP, который работает почти на всех версиях Unix-подобных операционных систем, включая Linux, BSD, Solaris и другие. Это проект с открытым исходным кодом, который предоставляет совместимость со стандартами серверов FTP. Интерфейс переведён на множество языков.
PureFTP лишён ограничений и вся функциональность доступна изначально. Среди самых полезных функций возможность замедлять подключение для экономии трафика, возможность работать в виртуальной файловой системе (chroot), установка лимитов на загрузку и скачивание и т.д.