Включить ssh windows server 2016

Обновлено: 07.07.2024

В этой статье мы рассмотрим, как быстро и просто настроить возможность подключения по SSH к Windows Server и управлять гетерогенными инфраструктурами на Windows и Linux через терминал, подключаясь единым способом.

Данный способ особо поможет пользователям macOS и Linux при управлении гетерогенными инфраструктурами через терминал, ведь полноценной реализации RSRP провайдера для Powershell Core до сих пор нет (но Microsoft ведет работу над ним), таким образом просто подключиться к Windows Server из кросс-платформенного Powershell Core не удастся. Нам поможет OpenSSH для Windows, который активно развивается, а Microsoft это развитие поддерживает финансово.

В облаке Azure Pack Infrastructure от InfoboxCloud мы уже предсоздали образ с Windows Server, версии 1709 для современных веб-приложений и сервисов, требующих стека Microsoft.

В образе предустановлено и настроено:

  • OpenSSH. Просто создайте виртуальную машину, пробросьте порт 22 и можно подключаться по SSH.
  • пакетный менеджер chocolatey, позволяющий обновлять все преднастроенное с помощью choco upgrade all и быстро устанавливать дополнительное ПО.
  • Windows Subsystem for Linux. Вы можете просто установить подходящий дистрибутив Linux в Windows и иметь привычное окружение, хорошо подходящее для задач администрирования.
  • Поддержка контейнеров Windows и Docker (предустановлены docker, docker-compose, docker-machine и consul, возможность быстрой установки kubernetes при необходимости).

Зачем вообще нужно подключаться к Windows Server по SSH

Современные гетерогенные ИТ-инфраструктуры удобнее обслуживать с помощью единого способа подключения, как к Windows так и к Linux, имея возможности подключаться серверам друг к другу, запускать скрипты автоматизации, собирать данные и так далее. Также современный компьютер администратора может работать не только на Windows, но и на Linux или macOS и возможность использовать привычный способ подключения через консоль поможет пользователям использовать эффективно и Windows Server. В нашем облаке стоимость Windows и Linux виртуальных машин одинакова и вы можете выбирать лучшую ОС для вашей задачи, не идя на компромиссы.

Как подключиться к Windows Server по SSH?

Готовый образ для современных веб-приложений и сервисов

Заполните форму для получения доступа в облако.
Мы предсоздадим вам всю требуемую инфраструктуру и вы сразу сможете начать работать.

Для подключения по SSH в качестве логина используйте Administrator, пароль — указанный при создании серверов (будет отправлен в письме с доступами).


Подключение успешно выполняется, можно работать как с CMD, так из Powershell из привычного для вас окружения с самой современной Windows Server версии 1709.


Если вы хотите создать серверы самостоятельно — воспользуйтесь образом «WS1709 DC Core EN SSH Docker».


Для обновления ОС используйте команду


Для обновления предустановленного ПО, команду:


Нужен графический интерфейс для управления ОС без него? Читайте прошлую статью про Project Honolulu – веб-интерфейс управления современными Windows Server.

Самостоятельная установка OpenSSH на Windows Server

Если вы уже используете Windows Server (приходите и мы его смигрируем в облако и все вам поставим :) ), ниже расскажем как наиболее простым образом установить OpenSSH самостоятельно.

Сделаем это на примере обычной Windows Server 2016. Подключитесь к серверу по RDP (порт 3389).
Запустите Powershell от имени администратора.


Установите пакетный менеджер Chocolatey командой:


Теперь выполните команду:


Для обновления переменных окружения уже запущенного терминала выполните команду:


Проверьте подключение к Windows Server по SSH.


Для включения возможности выполнения удаленных команд, запустите Powershell и введите:


Теперь вы можете полноценно управлять Windows Server по SSH и из консоли Windows Server подключаться к другим Linux–серверам даже без установки Linux в Windows Subsystem for Linux (WSL).


Скидка 25% на облако для читателей статьи

В следующих статьях мы рассмотрим другие технологии из образа для современных веб-приложений и сервисов на Windows, но можно не ждать новой статьи. Всем новым пользователям, подавшим заявку до 15 декабря 2017 года мы дарим 25% скидку на ресурсы облака Azure Pack Infrastructure до 1 марта 2018 года.

Если у вас есть замечания или предложения по новому образу, как его сделать еще удобнее — напишите нам.

OpenSSH — это средство подключения для удаленного входа, использующее протокол SSH. Оно шифрует весь трафик между клиентом и сервером для предотвращения перехвата информации, перехвата подключения и других атак.

OpenSSH можно использовать для подключения устройств с Windows 10 (версия 1809 и более поздние) или Windows Server 2019 с установленным клиентом OpenSSH к таким устройствам с установленным сервером OpenSSH.

Если вы скачали OpenSSH из репозитория GitHub по адресу PowerShell/openssh-portable, следуйте приведенным в репозитории инструкциям, а не инструкциям в этой статье.

Установка OpenSSH с помощью приложения "Параметры" в Windows

Оба компонента OpenSSH можно установить с помощью "Параметров" Windows на устройствах Windows Server 2019 и Windows 10.

Чтобы установить компоненты OpenSSH, сделайте следующее:

Откройте приложение Параметры, выберите элементы Приложения > Приложения и возможности, щелкните Дополнительные возможности.

Просмотрите этот список и определите, установлено ли средство OpenSSH. Если нет, выберите пункт Добавить компонент в верхней части страницы и сделайте следующее:

После завершения установки вернитесь в раздел Приложения > Приложения и возможности и Дополнительные возможности, где теперь должно появиться средство OpenSSH.

При установке серверного компонента OpenSSH будет создано и включено правило брандмауэра с именем OpenSSH-Server-In-TCP . Правило разрешает входящий трафик SSH через порт 22. Если это правило не включено и этот порт не открыт, подключения будут отклонены или сброшены.

Установка OpenSSH с помощью PowerShell

Чтобы установить OpenSSH с помощью PowerShell, запустите PowerShell от имени администратора. Для проверки доступности OpenSSH выполните следующий командлет:

Если ни один из них не установлен, должно отобразиться следующее:

Затем установите нужный серверный или клиентский компонент:

Оба командлета должны вернуть такие выходные данные:

Запуск и настройка OpenSSH Server

Чтобы запустить и настроить OpenSSH Server для первого использования, откройте PowerShell от имени администратора и выполните следующие команды для запуска sshd service :

Подключение к OpenSSH Server

После установки вы можете подключиться к серверу OpenSSH с устройства Windows 10 или Windows Server 2019, на котором установлен клиент OpenSSH, с помощью PowerShell, как показано ниже. Обязательно запустите PowerShell от имени администратора:

Если выбрать Да, этот сервер будет добавлен в список известных узлов SSH в клиенте Windows.

На этом этапе нужно ввести пароль. В целях безопасности пароль не будет отображаться по мере ввода.

После подключения вы увидите командную оболочку Windows:

Удаление OpenSSH с помощью приложения "Параметры" в Windows

Чтобы удалить OpenSSH с помощью приложения "Параметры" в Windows, сделайте следующее:

  1. Откройте приложение Параметры, а затем выберите Приложения > Приложения и возможности.
  2. Откройте страницу Дополнительные возможности.
  3. В списке выберите компонент Клиент OpenSSH или Сервер OpenSSH.
  4. Выберите Удалить.

Удаление OpenSSH с помощью PowerShell

Чтобы удалить компоненты OpenSSH с помощью PowerShell, выполните следующие команды:

Если служба использовалась во время удаления, может потребоваться перезагрузка Windows.

В этой статье мы рассмотрим, как установить SSH сервер (OpenSSH) на Windows Server и использовать его для удаленного управления сервером с помощью PowerShell по протоколу SSH.

Установка пакета OpenSSH

Если Chocolatey еще не установлен, установить его можно следующими командами PowerShell:

Установка OpenSSH сервера после этого выполняется командой:

choco install openssh -params '"/SSHServerFeature /KeyBasedAuthenticationFeature"' –y

Данная команда выполнит установку как SSH сервера, так и клиента. Если нужно установить только клиент, нужно убрать аргумент param.

Сценарий установки автоматически создаст правило файервола, разрешающее подключение на 22 порт, и запустит службы sshd и ssh-agent.

Примечание. Если правило по каким-то причинам не создалось, вы можете создать его командой:

New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH

sshd

Для перезагрузки переменных окружения, выполните команду:

SSH авторизация в Windows по паролю

Для удаленного подключения к данному SSH серверу под локальным пользователем user1, воспользуйтесь такой командой:

После запуска команды, для авторизации нужно указать пароль пользователя user1. Если SSH-сервер включен в домен, можно авторизоваться и под пользователем Active Directory. Имя пользователя в этом случае указывается в формате domain\domain_user_name или domain_user_name@domain.

ssh –l domain_user_name@domain remotehost

SSH с аутентфикацией по ключу

Для беспарольного входа можно использовать авторизацию на сервере SSH по ключу. Сначала нужно сгенерировать ключ на клиенте (в процессе нужно указать ключевую фразу)

Ssh-keygen.exe

В результате в каталоге пользователя c:\users\username\.ssh появится два файла id_rsa и id_rsa.pub.

Теперь нужно запустить службу ssh-agent

И добавить в настройки агента путь к нашему закрытому ключу:

Затем нужно разрешить аутентфикацию по этому ключу на стороне сервера. Для этого, скопируйте файл открытого ключа(id_rsa.pub) на SSH сервер в файл C:\users\username\.ssh\authorized_keys. Либо, при наличии администартивного доступа сразу на обоих системах, скопировать файл можно так:

cat c:\users\username\.ssh\id_rsa.pub | Add-Content '\\192.168.1.100\c$\users\username\.ssh\authorized_keys'

Теперь службе сервера SSH нужно дать право на чтение данных их каталога.ssh.

icacls C:\users\username\.ssh /grant "NT Service\sshd:R" /T

Теперь можно подключится SSH-клиентом к серверу, указав параметр –i и путь к закрытому ключу:

Ssh

Ssh –I c:\users\username\.ssh\id_rsa –l user@domain 192.168.1.100

По умолчанию открывается командная строка cmd, но можно запустить и PowerShell:

Подключение с клиента через модуль Posh-SSH

Для удаленного подключения к SSH серверу, модуль Posh-SSH используется следующим образом:

Протокол SSH уже продолжительное время является основным используемым средством для удалённого администрирования сетевых устройств и unix-ОС.

Попробуем избежать всего вышеперечисленного.

В качестве подопытных и настраиваемых систем будет выбран Centos Linux 7й версии и семейство ОС Cisco IOS / NX-OS, а также Windows Server 2016, имеющий с билда 1709 встроенную поддержку SSH.

Безусловно, можно добавить поддержку SSH и в Windows-системы более старых версий, но отдельно останавливаться на настройках этого варианта нет особого смысла, т.к. настройки эти будут урезанным функционалом того же OpenSSH. В общем, предлагаемые меры по улучшению безопасности SSH будут применимы для всех ОС.

Если используется другая *nix-ОС, а не redhad-based, то расположение конфигурационных файлов может быть иным. Это принципиально ничего не меняет.

Устанавливаем SSH

  • Secure Shell SSH Version 1 Integrated Client;
  • Secure Shell SSH Version 1 Server Support;
  • Secure Shell SSH Version 2 Server Support;

будут физически отсутствовать в составе IOS.

Добавление поддержки SSH в Windows Server

Начиная с Windows Server 2016 build 1709, поддержка SSH добавлена в платформу Windows.

Включить её несложно.

Get-WindowsCapability -Online | ? Name -like "OpenSSH*"

У меня Windows Server 2019, поэтому вывод выглядит так:

Add-WindowsCapability -Online -Name OpenSSH.Server

dism /Add-Capability /CapabilityName:OpenSSH.Server

0.0.1.0 /LimitAccess /Online

Проверим, что всё установилось:

ну либо просто запросим ещё раз Get-WindowsCapability -Online | ? Name -like "OpenSSH*" :

Фиксируем версию SSHv2

Включаем SSH 2.х в Cisco IOS

Please create RSA keys to enable SSH (and of atleast 768 bits for SSH v2).

Если ключи ещё не созданы, то делается это просто:

Теперь скажем SSH, чтобы он использовал именно эту пару:

Если всё ОК, нам выведется примерно такое:

%SSH-5-DISABLED: SSH 2.0 has been disabled %SSH-5-ENABLED: SSH 2.0 has been enabled

и явно указываем, что входящие подключения должны быть исключительно по SSH:

Включаем SSH 2.х в Cisco NX-OS

Не забудьте разве что явно включить использование SSH:

Включаем SSH 2.х в sshd

В настройках sshd нам надо будет добавить (либо заменить) строку:

Включаем SSH 2.х в Windows Server

Теперь ограничим список протоколов, которые могут использоваться для подтверждения подлинности при подключении клиента.

Ограничиваем перечень протоколов подтверждения подлинности сервера

DSA нам сразу не нравится, т.к. он умеет только ключи по 1024 бита и есть мнение, высказанное тов.Сноуденом, что NSA не просто так активно любит DSA.

Поэтому сразу отсечём вариант использования DSA.

Фиксируем в Cisco IOS использование RSA для host identification

У Cisco это будет просто:

Фиксируем алгоритмы host identification у sshd

  • ssh_host_dsa_key
  • ssh_host_dsa_key.pub
  • ssh_host_ecdsa_key
  • ssh_host_ecdsa_key.pub
  • ssh_host_rsa_key
  • ssh_host_rsa_key.pub
  • ssh_host_ed25519_key
  • ssh_host_ed25519_key.pub

оставим только нужные.

  • 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

Если директива про использование файла будет отсутствовать или файл будет недоступен, то соответствующий алгоритм не сможет использоваться для подтверждения подлинности узла, что может привести к проблемам с подключением.

Например, если оставить только модный Ed25519, а RSA выключить, то широко используемый PuTTY может говорить примерно такое:

Это, кстати, лечится обновлением PuTTY на последнюю версию, в которой есть поддержка новых алгоритмов. Так что сделайте это заранее.

Делается это так:

Для Ed25519: ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N ""

Для RSA: ssh-keygen -t rsa -b 4096 -f ssh_host_rsa_key -N ""

Ограничиваем протоколы для подтверждения подлинности SSH в Windows Server

  • HostKey ssh_host_rsa_key
  • HostKey ssh_host_ed25519_key

Для Ed25519: .\ssh-keygen -t ed25519 -f ssh_host_ed25519_key

Для RSA: .\ssh-keygen -t rsa -b 4096 -f ssh_host_rsa_key

Далее привязываем эти ключи командой ssh-add :

В принципе всё, сервис sshd можно запускать.

Фирменный костыль от Microsoft

Install-Module -Force OpenSSHUtils

Теперь про обмен ключевой информацией.

Настройка обмена ключами / создания ключевого материала

Посмотрим, как сейчас у нас настроен DH в SSH на Cisco IOS:

Minimum expected Diffie Hellman key size : 1024 bits

Плохо. Надо не ниже 2048 бит. Задаём это командой:

В варианте sshd нам надо будет добавить в конфигурацию строчку вида:

RekeyLimit default none

В случае Cisco IOS (кстати, только в некоторых IOS) настройка параметров rekey делается командой:

с параметром time или volume . Заметьте, или-или.

Перегенерация модулей SSHv2

При подключении и стартовой совместной генерации ключевого материала по алгоритму Диффи-Хеллмана-Меркля системе нужно быстро откуда-то достать новое простое число, притом большого размера. Чтобы не делать эту трудоёмкую вычислительную задачу в момент подключения, замедляя оное, используется заранее созданный массив таких чисел и их параметров.

В момент установки ОС и установки/обновления sshd это действие не производится, поэтому оно обязательно должно быть выполнено администратором.

ssh-keygen -G "$/moduli2048.bak" -M 127 -v -b 2048 -W 2

Когда вы сделаете такое же действие, система подумает какое-то время и выдаст подобное: Increased memory: 127 MB; need 4190208 bytes Sieve next 2130706432 plus 2047-bit Sieved with 203277289 small primes in 360 seconds Found 1468150 candidates

Формат файла moduli

ssh-keygen -T /etc/ssh/moduli -f "$/moduli2048.bak" -a 500

(только первая строка, для сравнения этого достаточно).

awk '$5 > 2000' /etc/ssh/moduli > "$/moduli.2048"

Этой командой мы скопировали в moduli.2048 только те строки, в которых в 5й колонке, где длина, значение более 2000.

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

Настраиваем используемый алгоритм шифрования трафика SSHv2

В Cisco IOS это будет задаваться так:

В настройках sshd нам надо будет добавить (либо заменить) строку:

Узнать, какие алгоритмы поддерживаются вашей версий sshd можно, выполнив команду:

Думаю, aes256-ctr там точно будет.

Отключаем сжатие SSHv2-трафика

Это простое действие, нужное для защиты от класса атак на или некорректную/неточную обработку распаковки каких-то специфичных данных со стороны клиента, или на различные переполнения.

В Cisco IOS сжатие в SSH не поддерживается официально, поэтому и отключать нечего.

Выбираем Message Authentication Code у SSHv2

Алгоритмы шифрования (за исключением варианта AEAD) не умеют проверять целостность данных, которые шифруют. Поэтому в нашем случае, когда используется AES256-CTR, надо озаботиться выбором MAC.

Поэтому, честно говоря, базового варианта hmac-sha1-96 вполне достаточно.

В Cisco IOS тип MAC будет задаваться так:

Теперь перейдём от криптографической части к сетевой.

Сетевые настройки SSHv2

Блок будет выглядеть примерно так:

IgnoreRhosts yes отключает древний механизм создания списка узлов (обычно в файле .rhosts ), с которых возможен вход без аутентификации.

Ограничения SSH на процедуру подключения к сеансу

Блок наших настроек про всё это будет выглядеть так:

RhostsRSAAuthentication no PubkeyAuthentication no HostbaseAuthentication no ChallengeResponseAuthentication no KerberosAuthentication no PasswordAuthentication yes
LoginGraceTime 15
ClientAliveInterval 1800 ClientAliveCountMax 0
MaxAuthTries 3 MaxSessions 1 PermitTunnel no
MaxStartups 10:50:20 ShowPatchLevel no

Разберёмся, что и как.

Блок из RhostsRSAAuthentication no , PubkeyAuthentication no , HostbaseAuthentication no , ChallengeResponseAuthentication no , KerberosAuthentication no отключает неиспользуемые методы аутентификации. Безусловно, если вы используете для входа на SSH-сервер, допустим, Kerberos, то отключать Kerberos не нужно. Но в типовом сценарии, когда вход осуществляется более распространёнными способами, лишнее надо в явном виде отключать.

Параметр MaxAuthTries говорит, через сколько попыток неудачной аутентификации (например, ввода неверного пароля) сессия будет отключена сервером. По умолчанию это 6, многовато. Трёх раз хватит.

Командой ShowPatchLevel no мы выключим публикацию детальной информации о версии SSH подключающемуся клиенту.

Теперь перейдём к блоку настроек, связанных с учётными записями.

Группы и пользователи в настройке SSH-сервера

Вполне очевидно, что нам надо как-то явно указать, кто к нам может подключаться и какие требования к этому кому-то будут выдвигаться.

AllowUsers admin admin2 AllowGroups nixadmins DenyUsers nginx DenyGroups nginx PermitEmptyPasswords no PermitRootLogin no UsePrivilegeSeparation sandbox

установит минимальную длину паролей на данном устройстве.

Краткий итог

Читайте также: