Windows server ssh server настройка

Обновлено: 05.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 (sshd) для ОС Windows.

Настройка стандартной оболочки OpenSSH для Windows

Стандартная оболочка командной строки предоставляет пользователю интерфейс, который он увидит при подключении к серверу по протоколу SSH. По умолчанию в среде Windows изначально используется командная оболочка Windows (cmd.exe). Кроме того, Windows включает PowerShell и Bash, и вы можете настроить в качестве оболочки по умолчанию для сервера любую из оболочек командной строки сторонних производителей, которые предоставляются для Windows.

Чтобы задать командную оболочку по умолчанию, для начала убедитесь, что папка установки OpenSSH находится в системном пути. В среде Windows по умолчанию она устанавливается в папку SystemDrive:WindowsDirectory\System32\openssh. Следующие команды позволяют узнать текущее значение пути (переменную среды path) и добавить к нему стандартную папку установки OpenSSH.

Командная оболочка Используемая команда
Команда путь
PowerShell $env:path

Настройка оболочки SSH по умолчанию выполняется в реестре Windows, где вам нужно добавить полный путь к исполняемому файлу оболочки в строковое значение DefaultShell в разделе Computer\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH.

Например, следующая команда PowerShell устанавливает PowerShell.exe в качестве оболочки по умолчанию:

Конфигурация Windows в файле sshd_config

В среде Windows программа sshd по умолчанию считывает данные конфигурации из файла %programdata%\ssh\sshd_config, но вы можете указать другой файл конфигурации, запустив команду sshd.exe с параметром -f. Если указанный файл отсутствует, sshd создаст новый файл с конфигурацией по умолчанию при запуске службы.

Ниже перечислены элементы конфигурации специально для среды Windows, которые можно указать в sshd_config. Существуют и другие параметры конфигурации, которые здесь не перечислены, так как они подробно описаны в документации по OpenSSH для Win32 в Интернете.

AllowGroups, AllowUsers, DenyGroups, DenyUsers

Управление тем, какие пользователи и группы могут подключаться к серверу, осуществляется с помощью директив AllowGroups, AllowUsers, DenyGroups и DenyUsers. Директивы разрешения и запрета обрабатываются в следующем порядке: DenyUsers, AllowUsers, DenyGroups и наконец AllowGroups. Все имена учетных записей должны быть указаны в нижнем регистре. Дополнительные сведения о шаблонах с подстановочными знаками вы найдете в разделе PATTERNS непосредственно в файле ssh_config.

При настройке правил для пользователей и (или) групп в домене используйте следующий формат: user?domain* . Windows поддерживает несколько форматов для указания субъектов домена, но многие из них конфликтуют со стандартными шаблонами в Linux. По этой причине добавлен символ *, чтобы поддерживать полные доменные имена. Кроме того, этот подход использует "?" вместо "@", чтобы избежать конфликтов с форматом username@host.

Пользователи и группы, входящие в рабочие группы, а также подключенные к Интернету учетные записи всегда разрешаются в имена локальных учетных записей (без сегмента домена, примерно как стандартные имена в UNIX). Пользователи и группы домена строго разрешаются в формат NameSamCompatible, то есть "короткое_имя_домена\имя_пользователя". Все правила конфигурации для пользователей и групп должны соответствовать этому формату.

Примеры для пользователей и групп домена

Примеры для локальных пользователей и групп

AuthenticationMethods

Для OpenSSH в Windows поддерживаются только методы проверки подлинности "password" и "publickey".

AuthorizedKeysFile

По умолчанию используется значение .ssh/authorized_keys .ssh/authorized_keys2. Если путь не является абсолютным, он вычисляется относительно основного каталога пользователя (или пути к образу профиля). Например: c:\users\user. Обратите внимание, что если пользователь входит в группу администраторов, используется %programdata%/ssh/administrators_authorized_keys.

ChrootDirectory (добавлена поддержка в версии 7.7.0.0)

Эта директива поддерживается только для сеансов SFTP. Удаленный сеанс подключения к cmd.exe не учитывает ее. Чтобы настроить сервер chroot только для SFTP, укажите параметр ForceCommand со значением internal-sftp. Вы также можете настроить SCP с поддержкой chroot, реализовав пользовательскую оболочку, которая допускает только SCP и SFTP.

HostKey

По умолчанию используются значения %programdata%/ssh/ssh_host_ecdsa_key, %programdata%/ssh/ssh_host_ed25519_key, %programdata%/ssh/ssh_host_dsa_key и %programdata%/ssh/ssh_host_rsa_key. Если эти файлы отсутствуют, sshd автоматически создает их при запуске службы.

Сопоставление

Обратите внимание на правила шаблона в этом разделе. Имена пользователей и групп должны быть в нижнем регистре.

PermitRootLogin

Неприменимо в ОС Windows. Чтобы предотвратить вход администратора, примените для группы Administrators директиву DenyGroups.

SyslogFacility

Если вам требуется ведение журнала в файле, используйте LOCAL0. Журналы создаются в папке %programdata%\ssh\logs. Любое другое значение, включая используемое по умолчанию AUTH, направляет журналы в ETW. Дополнительные сведения см. в статье о возможностях по ведению журнала в Windows.

Не поддерживается

Следующие параметры конфигурации недоступны в версии OpenSSH, которая поставляется в составе Windows Server 2019 и Windows 10 версии 1809:

В этой статье мы рассмотрим, как установить 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-сервер на Windows-сервере? В среде Windows SSH может показаться не очень полезным. В конце концов, у нас есть RDP и PowerShell Remoting с WinRM, которые уже обеспечивают мощные возможности удаленного управления. Тем не менее, SSH в Windows определенно имеет свои преимущества. Среди них можно выделить такие вещи, как:

  • Простое подключение и управление Windows-серверами из Linux или MacOS с помощью встроенных инструментов.
  • Подключение из систем Windows к серверам Linux — это простое решение с интегрированным SSH-клиентом. Есть много администраторов Linux, которые должны управлять серверами на работе с помощью ОС Windows, и всегда должны устанавливать некоторые дополнительные инструменты, такие как PuTTY или WinSCP. Теперь они могут использовать знакомые команды SSH прямо из командной строки Windows.
  • Используются те же инструменты удаленного управления для серверов Linux и Windows (SSH, SCP, аутентификация с открытым ключом и т. д.).
  • Кроссплатформенный PowerShell Remoting. PowerShell Core использует SSH для включения удаленного сеанса PowerShell в Windows, MacOS и Linux. В отличие от WinRM PowerShell Remoting — Windows PowerShell работает только на Windows.
  • Вместе с подсистемой Windows для Linux вы можете получить Linux-подобные сеансы SSH с Bash и обычные инструменты Linux также на сервере Windows, который позволяет администраторам Linux использовать свои знания для управления системами Windows.
  • И наоборот: администраторы Windows могут использовать PowerShell для управления сервером Linux, если на нем будет присутствовать соответствующий shell от Microsoft.
  • Просто другой вариант для удаленного управления, который дает еще большую гибкость.

Установка OpenSSH в Windows Server 2019

Открываем Settings — Apps & features — Manage optional features:


Нажимаем Add a feature, ищем OpenSSH Server — Install:


На предыдущем экране дожидаемся окончания процесса инсталляции. OpenSSH сервер можем считать установленным.

Обращаем внимание, что установка этим методом автоматически создаст правило Windows Firewall, с названием «OpenSSH-Server-In-TCP», открывающее 22 порт для входящих подключений.

Проверим, присутствует ли на нашей системе встроенный OpenSSH:

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

В ответ должны получить:

0.0.1.0
State : NotPresent

Устанавливаем клиент, если он не установлен:

Add-WindowsCapability -Online -Name OpenSSH.Client

Для установки сервера вводим:

Add-WindowsCapability -Online -Name OpenSSH.Server

В обоих случаях вывод должен быть следующим:

Path :
Online : True
RestartNeeded : False

Первичная конфигурация SSH-сервера

По умолчанию при подключении к OpenSSH-серверу используется командная строка Windows. Вы можете использовать практически любую оболочку на вашем компьютере с Windows через SSH-соединение. Даже возможно использовать Bash, когда подсистема Windows для Linux (WSL) также установлена на целевой машине. Также возможно изменение оболочки по умолчанию на SSH-сервере на нечто иное, чем командная оболочка. Для этого ключ реестра «DefaultShell» необходимо изменить.

Сделать это можно как через редактор реестра regedit.exe, открыв в нем следующий путь: HKEY_LOCAL_MACHINESOFTWAREOpenSSH и изменив в нем параметр DefaultShell, указав в нем полный путь до исполняемого файла необходимой командной строки, например:

Тоже самое можно сделать используя PowerShell:

New-ItemProperty -Path "HKLM:SOFTWAREOpenSSH" -Name DefaultShell -Value "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" -PropertyType String -Force

Проверим настройки Windows Firewall, используя для этого PowerShell:

Get-NetFirewallRule -Name *ssh*

Введя данную команду мы получим параметры правила, разрешающего SSH-подключение к серверу. Если правила не оказалось, введем следующую команду, создав его:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

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

После установки функции SSH-сервера нам остается только его запустить:

Опционально можно установить для службы sshd автоматический запуск:

Set-Service -Name sshd -StartupType 'Automatic'

Подключение к серверу

Теперь мы готовы к работе и можем подключиться через установленное приложение к нашему хосту. Это можно осуществить либо с Windows 10, компьютера с Linux, с putty.exe на более старой машине с Windows, либо с Bash в настольной операционной системе от Microsoft. Все, что вам нужно, это найти какой-либо SSH-клиент, ввести в него имя пользователя, имя вашего сервера или IP-адрес и подключиться.

Для SSH-клиента в PowerShell синтаксис будет таким:

Ответив на него yes, хост подключения будет добавлен в список известных хостов сервера. После чего необходимо ввести пароль пользователя (по соображениям безопасности вводимые символы отображаться не будут). После успешного подключения отобразится интерфейс используемой командной строки:

Копирование файлов

Также, как с сервером OpenSSH в любой системе * nix, вы можете использовать SCP для копирования файлов на сервер или с сервера.
Например, администратор Linux может быстро получить файл журнала с сервера Windows с помощью той же команды, что и для сервера Linux.

scp username@servername:C:/inetpub/logs/LogFiles/W3SVC1/u_ex191017.log u_ex191017.log

Когда вы подключаетесь из Bash/*nix к машине с Windows, нужно помнить, что пути Windows также должны указываться с обычными косыми чертами Unix вместо обратных косых черт. Например, C:/Windows вместо C:Windows.

sshd_config

Аналогично операционным системам семейства Linux, OpenSSH Server в Windows имеет в своем составе особый файл, где хранятся все параметры для выполнения более подробных настроек. Например, для ограничения входа .

Кроме того, у Microsoft есть документация для специфичных настроек Windows.

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