В современных версиях Windows уже есть встроенный SSH сервер на базе пакета OpenSSH. В этой статье мы покажем, как установить и настроить OpenSSH сервер в Windows 10/11 и Windows Server 2022/2019 и подключиться к нему удаленно по защищенному SSH протоколу (как к Linux).
Содержание:
- Установка сервера OpenSSH в Windows
- Настройка SSH сервера в Windows
- Sshd_config: Конфигурационный файл сервера OpenSSH
- Подключение по SSH к Windows компьютеру
- Логи SSH подключений в Windows
Установка сервера OpenSSH в Windows
Пакет OpenSSH Server включен в современные версии Windows 10 (начиная с 1803), Windows 11 и Windows Server 2022/2019 в виде Feature on Demand (FoD). Для установки сервера OpenSSH достаточно выполнить PowerShell команду:
Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH.Server*’ | Add-WindowsCapability –Online
Или при помощи команды DISM:
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0
Если ваш компьютер подключен к интернету, пакет OpenSSH.Server будет скачан и установлен в Windows.
Также вы можете установить сервер OpenSSH в Windows через современную панель Параметры (Settings -> Apps and features -> Optional features -> Add a feature, Приложения -> Управление дополнительными компонентами -> Добавить компонент. Найдите в списке OpenSSH Server и нажмите кнопку Install).
На изолированных от интернета компьютерах вы можете установить компонент с ISO образа Features On Demand (доступен в личном кабинете на сайте Microsoft: MSDN или my.visualstudio.com). Скачайте диск, извлеките его содержимое в папку c:\FOD (достаточно распаковать извлечь файл
OpenSSH-Server-Package~31bf3856ad364e35~amd64~~.cab
), выполните установку из локального репозитория:
Add-WindowsCapability -Name OpenSSH.Server~~~~0.0.1.0 -Online -Source c:\FOD
Также доступен MSI установщик OpenSSH для Windows в официальном репозитории Microsoft на GitHub (https://github.com/PowerShell/Win32-OpenSSH/releases/). Например, для Windows 10 x64 нужно скачать и установить пакет OpenSSH-Win64-v8.9.1.0.msi. Следующая PowerShell команда скачает MSI файл и установит клиент и сервер OpenSSH:
Invoke-WebRequest https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.9.1.0p1-Beta/OpenSSH-Win64-v8.9.1.0.msi -OutFile $HOME\Downloads\OpenSSH-Win64-v8.9.1.0.msi -UseBasicParsing
msiexec /i c:\users\root\downloads\OpenSSH-Win64-v8.9.1.0.msi
Также вы можете вручную установить OpenSSH сервер в предыдущих версиях Windows (Windows 8.1, Windows Server 2016/2012R2). Пример установки Win32-OpenSSH есть в статье “Настройка SFTP сервера (SSH FTP) в Windows”.
Чтобы проверить, что OpenSSH сервер установлен, выполните:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'
State : Installed
Настройка SSH сервера в Windows
После установки сервера OpenSSH в Windows добавляются две службы:
- ssh-agent (OpenSSH Authentication Agent) – можно использовать для управления закрытыми ключами если вы настроили SSH аутентификацию по ключам;
- sshd (OpenSSH SSH Server) – собственно сам SSH сервер.
Вам нужно изменить тип запуска службы sshd на автоматический и запустить службу с помощью PowerShell:
Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd
С помощью nestat убедитесь, что теперь в системе запущен SSH сервер и ждет подключений на порту TCP:22 :
netstat -na| find ":22"
Проверьте, что включено правило брандмауэра (Windows Defender Firewall), разрешающее входящие подключения к Windows по порту TCP/22.
Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled
Name DisplayName Description Enabled ---- ----------- ----------- ------- OpenSSH-Server-In-TCP OpenSSH SSH Server (sshd) Inbound rule for OpenSSH SSH Server (sshd) True
Если правило отключено (состоянии Enabled=False) или отсутствует, вы можете создать новое входящее правило командой New-NetFirewallRule:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Рассмотрим, где храниться основные компоненты OpenSSH:
- Исполняемые файлы OpenSSH Server находятся в каталоге
C:\Windows\System32\OpenSSH\
(sshd.exe, ssh.exe, ssh-keygen.exe, sftp.exe и т.д.) - Конфигурационный файл sshd_config (создается после первого запуска службы):
C:\ProgramData\ssh
- Файлы authorized_keys и ssh ключи можно хранить в профиле пользователей:
%USERPROFILE%\.ssh\
Sshd_config: Конфигурационный файл сервера OpenSSH
Настройки сервере OpenSSH хранятся в конфигурационном файле %programdata%\ssh\sshd_config. Это обычный текстовый файл с набором директив. Для редактирования можно использовать любой текстовый редактор (я предпочитаю notepad++). Можно открыть с помощью обычного блокнота:
start-process notepad C:\Programdata\ssh\sshd_config
Например, чтобы запретить SSH подключение для определенного доменного пользователя (и всех пользователей указанного домена), добавьте в конце файле директивы:
DenyUsers winitpro\[email protected] DenyUsers corp\*
Чтобы разрешить подключение только для определенной доменной группы:
AllowGroups winitpro\sshadmins
Либо можете разрешить доступ для локальной группы:
AllowGroups sshadmins
По умолчанию могут к openssh могут подключаться все пользователи Windows. Директивы обрабатываются в следующем порядке: DenyUsers, AllowUsers, DenyGroups,AllowGroups.
Можно запретить вход под учетными записями с правами администратора, в этом случае для выполнения привилегированных действий в SSH сессии нужно делать runas.
DenyGroups Administrators
Следующие директивы разрешают SSH доступ по ключам (SSH аутентификации в Windows с помощью ключей описана в отдельной статье) и по паролю:
PubkeyAuthentication yes PasswordAuthentication yes
Вы можете изменить стандартный SSH порт TCP/22, на котором принимает подключения OpenSSH в конфигурационном файле sshd_config в директиве Port.
После любых изменений в конфигурационном файле sshd_config нужно перезапускать службу sshd:
restart-service sshd
Подключение по SSH к Windows компьютеру
Теперь вы можете попробовать подключиться к своей Windows 10 через SSH клиент (в этом примере я использую putty).
Вы можете использовать встроенный SSH клиентом Windows для подключения к удаленному хосту. Для этого нужно в командной строке выполнить команду:
ssh [email protected]
В этом примере
alexbel
– имя пользователя на удаленном Windows компьютере, и 192.168.31.102 – IP адрес или DNS имя компьютера.
Обратите внимание что можно использовать следующие форматы имен пользователей Windows при подключении через SSH:
-
alex@server1
– локальный пользователь Windows -
[email protected]@server1
–пользователь Active Directory (в виде UPN) или аккаунт Microsoft/ Azure(Microsoft 365) -
winitpro\alex@server1
– NetBIOS формат имени
В домене Active Directory можно использовать Kerberos аутентификацию в SSH. Для этого в sshd_config нужно включить параметр:
GSSAPIAuthentication yes
После этого можно прозрачно подключать к SSH сервер с Windows компьютера в домене из сессии доменного подключается. В этом случае пароль пользователя не указывается и выполняется SSO аутентификация через Kerberos:
ssh -K server1
При первом подключении появится стандартный запрос на добавление узла в список известных SSH хостов.
Нажимаем Да, и в открывшееся окне авторизуемся под пользователем Windows.
При успешном подключении запускается командная оболочка cmd.exe со строкой-приглашением.
admin@win10tst C:\Users\admin>
В командной строке вы можете выполнять различные команды, запускать скрипты и программы.
Я предпочитаю работать в командной строке PowerShell. Чтобы запустить интерпретатор PowerShell, выполните:
powershell.exe
Чтобы изменить командную оболочку (Shell) по умолчанию в OpenSSH с cmd.exe на PowerShell, внесите изменение в реестр такой командой:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String –Force
Осталось перезапустить SSH подключение и убедиться, что при подключении используется командный интерпретатор PowerShell (об этом свидетельствует приглашение
PS C:\Users\admin>
).
В SSH сессии запустилась командная строка PowerShell, в которой работают привычные функции: авто дополнение, раскраска модулем PSReadLine, история команд и т.д. Если текущий пользователь входит в группу локальных администраторов, то все команды в его сессии выполняются с повышенными правами даже при включенном UAC.
Логи SSH подключений в Windows
В Windows логи подключений к SSH серверу по-умолчанию пишутся не в текстовые файлы, а в отдельный журнал событий через Event Tracing for Windows (ETW). Откройте консоль Event Viewer (
eventvwr.msc
>) и перейдите в раздел Application and services logs -> OpenSSH -> Operational.
При успешном подключении с помощью к SSH серверу с помощью пароля в журнале появится событие:
EventID: 4 sshd: Accepted password for root from 192.168.31.53 port 65479 ssh2
Если была выполнена аутентификация с помощью SSH ключа, событие будет выглядеть так:
sshd: Accepted publickey for locadm from 192.168.31.53 port 55772 ssh2: ED25519 SHA256:FEHDEC/J72Fb2zC2oJNb45678967kghH43h3bBl31ldPs
Если вы хотите, чтобы логи писались в локальный текстовый файл, нужно в файле sshd_config включить параметры:
SyslogFacility LOCAL0 LogLevel INFO
Перезапустите службу sshd и провеьте, что теперь логи SSH сервера пишутся в файл C:\ProgramData\ssh\logs\sshd.log
Время на прочтение3 мин
Количество просмотров6.5K
В этой статье мы рассмотрим, как быстро и просто настроить возможность подключения по 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 при необходимости).
Также в статье рассказано, как добавить поддержку SSH на Windows на собственном сервере или виртуальной машине.
В конце статьи скидка на облако.
Зачем вообще нужно подключаться к 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».
Для обновления ОС используйте команду
sconfig
Для обновления предустановленного ПО, команду:
choco upgrade all
Нужен графический интерфейс для управления ОС без него? Читайте прошлую статью про Project Honolulu – веб-интерфейс управления современными Windows Server.
Самостоятельная установка OpenSSH на Windows Server
Если вы уже используете Windows Server (приходите и мы его смигрируем в облако и все вам поставим ), ниже расскажем как наиболее простым образом установить OpenSSH самостоятельно.
Сделаем это на примере обычной Windows Server 2016. Подключитесь к серверу по RDP (порт 3389).
Запустите Powershell от имени администратора.
Установите пакетный менеджер Chocolatey командой:
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
Теперь выполните команду:
choco install openssh -params '"/SSHServerFeature"'
Для обновления переменных окружения уже запущенного терминала выполните команду:
refreshenv
Проверьте подключение к Windows Server по SSH.
Для включения возможности выполнения удаленных команд, запустите Powershell и введите:
Enable-PSRemoting
Теперь вы можете полноценно управлять Windows Server по SSH и из консоли Windows Server подключаться к другим Linux–серверам даже без установки Linux в Windows Subsystem for Linux (WSL).
Скидка 25% на облако для читателей статьи
В следующих статьях мы рассмотрим другие технологии из образа для современных веб-приложений и сервисов на Windows, но можно не ждать новой статьи. Всем новым пользователям, подавшим заявку до 15 декабря 2017 года мы дарим 25% скидку на ресурсы облака Azure Pack Infrastructure до 1 марта 2018 года.
Для получения скидки заполните форму https://infoboxcloud.ru/request и в поле комментария укажите секретный код: «Скидка 25% с хабра за инновации». Также будет полезно, если укажете требуемое количество серверов, для каждого количество ядер процессора, объем оперативной памяти, диска и желаемую ОС. Если нужно перенести текущую ИТ-инфраструктуру в облако — поможем с этим.
Если у вас есть замечания или предложения по новому образу, как его сделать еще удобнее — напишите нам.
Отличного дня и успешной работы!
Для того чтобы установить OpenSSH на Windows Server 2019 или 2022 найдите и откройте Windows Settings. В новом окне перейдите в раздел «Apps» и выберите «Select Optional Features» в разделе «Apps & Features».
Нажмите «Manage optional features», и выберите OpenSSH Server из полученного списка, затем нажмите «Install».
После установки запустите PowerShell от Администратора. Вставьте следующую команду для установки OpenSSH Server.
Add-WindowsCapability -Online -Name OpenSSH.Server
Установите OpenSSH Client:
Add-WindowsCapability -Online -Name OpenSSH.Client
Для настройки сервера можно использовать следующую команду, которая откроет блокнот и можно будет добавить свои изменения:
start-process notepad C:\Programdata\ssh\sshd_config
После всех настроек нужно запустить сервис командой:
Start-Service sshd
Далее необходимо будет настроить Firewall.
Для этого в меню “Пуск” находим “Server Manager”. Там выбираем “Tools” и клацаем на “Windows Defender Firewall with Advanced Security” в выпавшем списке.
Теперь кликаем на “Inbound Rules” в открывшемся окне и создаём новое правило “New Rule”. В окне “New Inbound Rule Wizard” выбираем “Protocol and Ports”, клацаем “TCP” и указываем порт 22 в “Specific local ports:”. После жмём Next, Next даём название правилу и нажимаем Finish.
Теперь всё готово к подключению по ssh.
Подключиться можно с любой машины – как с linux, так и с Windows. Достаточно ввести:
ssh -l Administrator SERVER-IP
Согласиться с парой ключей:
ECDSA key fingerprint is SHA256:Vv2A8NOfzCLR/e35Fm5UyqGeJptrn6ZlY6Vabx0wHXQ.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
И вы можете работать на удалённом сервере по ssh, пример подключения с linux-машины.
Спасибо за чтение! Надеемся статья была для вас полезна.
SSH-протокол (англ. Secure Shell ) используется для безопасного удалённого управления операционной системой. По SSH можно подключиться к любому серверу с операционной системой семейства Linux.
Если на вашем сервере установлена ОС Windows Server — используйте подключение по RDP.
- Где найти доступы к серверу
- Подключение по SSH в Windows
- Подключение по SSH в Linux/MacOS
Где найти доступы к серверу
Для подключения по SSH потребуется указать IP-адрес, пароль и логин администратора сервера. В Личном кабинете в разделе Виртуальные серверы выберите нужный сервер и сверху на панели инструментов нажмите кнопку Инструкция — в блоке «Доступ к серверу» указаны IP-адрес и логин. Пароль вы устанавливаете самостоятельно — по кнопке Задать пароль (если ещё не сделали это ранее).
Мы не храним пароль для доступа к серверу. Ответственность за его сохранность лежит на пользователе.
Подключение по SSH в Windows
Если на вашем компьютере установлена ОС Windows, а на сервере — UNIX-подобная система (например, Ubuntu, Debian, CentOS и др.), то для установки SSH-соединения можно использовать PuTTY
или OpenSSH
.
Рассмотрим подключение по SSH через утилиту OpenSSH (доступно для Windows 10/Windows Server 2019 и новее).
Шаги для создания подключения:
- Откройте PowerShell от имени администратора.
- Если у вас не установлен OpenSSH, выполните команду:
Add-WindowsCapability -Online -Name OpenSSH.Client
Проверить, установлен ли OpenSSH, можно командой:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Client*'
Если статус installed, данное ПО доступно к работе на вашем Windows.
-
Выполним все в том же PowerShell команду:
ssh username@server_ip
где:
username
— имя пользователя на Linux-сервере.server_ip
— IP-адрес или имя хоста сервера.
Если используется нестандартный порт SSH (по умолчанию — 22), укажите его с помощью флага-p
:
ssh username@server_ip -p порт
При первом подключении вам будет предложено подтвердить ключ сервера. Нажмите yes, чтобы продолжить.
Если в вашей Windows нет утилиты OpenSSH или хотите воспользоваться другим способом, рассмотрим вариант подключения через PuTTY. Это бесплатная программа под Windows состоит из одного запускаемого файла и не требует установки.
Чтобы установить соединение при помощи PuTTY, необходимо проделать следующие действия:
- Скачайте нужную версию PuTTY по ссылке.
-
Запустите файл putty.exe. Откроется окно программы:
По умолчанию никаких настроек программы менять не нужно. Достаточно убедиться, что указан порт Port 22 и тип соединения Connection type — SSH.
-
В поле Host Name (or IP address) введите IP-адрес сервера. Нажмите кнопку
Open
.Может появиться предупреждение системы безопасности PuTTY — оно срабатывает при подключении к новому серверу. Нажмите
Да
— и соединение продолжится. -
В появившейся командной строке введите имя пользователя, под которым будет выполнен вход на сервер. Для первого подключения к серверу или подключения в режиме администратора используется логин
root
. - В следующей строке введите пароль пользователя. При вводе пароля символы в командной строке не отображаются: можно набрать пароль вслепую или вставить кликом правой кнопки мыши, предварительно скопировав (Ctrl+C). При этом никаких видимых изменений в консоли не произойдёт, но не переживайте, так и должно быть. После ввода нажмите клавишу Enter. Если имя пользователя или пароль указаны неправильно, выведется ошибка «Access denied». В случае успешного подключения откроется командная строка виртуального сервера.
Готовые серверы от 219 ₽/мес
Готовые конфигурации VPS/VDS в дата-центрах в России и Европе. Быстрый запуск сервера за 2 минуты
Подробнее
Подключение по SSH в Linux/MacOS
Подключиться по SSH к виртуальному серверу можно через терминал — в обоих случаях это приложение предустановлено.
В операционных системах семейства Linux (Ubuntu и др.) его можно открыть сочетанием клавиш Ctrl+Alt+T.
В MacOS приложение Терминал можно найти через Spotlight
(иконка поиска в правом верхнем углу экрана).
Подключиться к виртуальному серверу по SSH можно одной командой:
ssh username@ip_adress
где вместо username нужно указать логин пользователя, вместо ip-adress — IP-адрес сервера, к которому вы подключаетесь. Если на сервере используется нестандартный порт SSH, команда изменится:
ssh username@ip_adress -p 22
где 22 — порт, по которому будет произведено подключение по SSH.
После ввода команды система запросит подтверждение подключения (необходимо ввести yes и нажать Enter) и пароль пользователя. После ввода нажмите клавишу Enter откроется SSH-соединение: