Windows Server

OpenSSH на Windows Server: вход по SSH-ключу и передача файлов через SCP и SFTP

6 шагов 13 мин чтения 20 просмотров 0
Содержание

В состав Windows Server входит OpenSSH Server в сборке Microsoft, поэтому Windows-сервером можно управлять так же, как Linux: выполнять команды PowerShell по SSH, автоматизировать задачи скриптами и безопасно копировать файлы через scp или SFTP-клиенты вроде WinSCP и FileZilla — не открывая сеанс удалённого рабочего стола. В статье: установка и запуск SSH-сервера в Windows Server 2019, 2022 и 2025, PowerShell как оболочка по умолчанию, вход администраторов по ключам, смена порта и передача файлов.

SSH-сервер на порту 22 привлекает тех же ботов-подборщиков паролей, что и в Linux. Используйте аутентификацию по ключам и отключите вход по паролю (шаг 4) или хотя бы ограничьте доступ к порту 22 своими IP-адресами в брандмауэре.

Шаг 1: Установка OpenSSH Server

Откройте PowerShell от имени администратора. Команда ниже показывает, установлены ли клиент и сервер; в Windows Server 2025 сервер обычно уже присутствует, и его нужно только включить.

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

# Install the server if its State is NotPresent
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

В Windows Server 2016, где OpenSSH Server нет в составе системы, установите MSI-пакет Win32-OpenSSH из релизов Microsoft в репозитории PowerShell/Win32-OpenSSH на GitHub.

Шаг 2: Запуск службы и проверка брандмауэра

# Start sshd now and at every boot
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

# The installer normally creates an inbound rule for TCP 22; create it if it is missing
if (-not (Get-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -ErrorAction SilentlyContinue)) {
  New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' `
    -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
}

Get-Service sshd
netstat -ano | findstr ":22"

Теперь подключитесь со своего компьютера командой ssh [email protected] (SSH-клиент есть в Windows 10/11, macOS и Linux) и введите пароль администратора. По умолчанию открывается приглашение cmd.exe.

Шаг 3: PowerShell как оболочка по умолчанию

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell `
  -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Теперь новые SSH-сеансы запускаются в PowerShell. Если у вас установлен PowerShell 7, укажите вместо этого путь к pwsh.exe.

Шаг 4: Вход по SSH-ключам и отключение паролей

Для учётных записей из группы Administrators OpenSSH в Windows берёт открытые ключи из одного общего файла C:\ProgramData\ssh\administrators_authorized_keys, а не из папки .ssh в профиле пользователя. Доступ к этому файлу должен быть только у Administrators и SYSTEM, иначе sshd его игнорирует.

# On your own computer: create a key pair if you do not have one yet
ssh-keygen -t ed25519

# On the server (PowerShell as Administrator): paste your PUBLIC key (id_ed25519.pub)
Add-Content -Path "C:\ProgramData\ssh\administrators_authorized_keys" -Value "ssh-ed25519 AAAA...your-key... you@laptop"
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

Проверьте вход по ключу в новом окне. Когда всё заработает, откройте C:\ProgramData\ssh\sshd_config в Блокноте и задайте:

PubkeyAuthentication yes
PasswordAuthentication no
Restart-Service sshd

Не закрывайте текущий сеанс, пока не убедитесь, что новый вход по ключу работает. Для обычных пользователей (не администраторов) ключи размещаются в C:\Users\USERNAME\.ssh\authorized_keys.

Шаг 5: Смена порта SSH (необязательно)

# In C:\ProgramData\ssh\sshd_config set:  Port 2222
New-NetFirewallRule -Name 'OpenSSH-2222' -DisplayName 'OpenSSH Server 2222' `
  -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow
Restart-Service sshd
Disable-NetFirewallRule -Name 'OpenSSH-Server-In-TCP'   # close 22 after testing 2222

Чтобы разрешить SSH только со своих адресов, добавьте к правилу брандмауэра параметр -RemoteAddress 198.51.100.20. Подробнее о правилах брандмауэра Windows — в статье об открытии и закрытии портов в брандмауэре Windows.

Шаг 6: Передача файлов через scp и SFTP

# Upload a file to the Administrator desktop (use forward slashes in Windows paths)
scp .\site-backup.zip [email protected]:C:/Users/Administrator/Desktop/

# Download a folder recursively
scp -r [email protected]:C:/inetpub/wwwroot ./wwwroot-copy

# Interactive SFTP session
sftp -P 2222 [email protected]

Подойдут и графические клиенты, например WinSCP и FileZilla: выберите протокол SFTP, укажите IP и порт сервера, ключ или пароль. Для больших файлов это гораздо быстрее и надёжнее, чем копирование через буфер обмена удалённого рабочего стола.

Частые вопросы

При входе по ключу всё равно запрашивается пароль

Для учётных записей администраторов ключ должен лежать в administrators_authorized_keys с правами доступа ровно как в шаге 4. Откройте журнал Просмотр событий → Журналы приложений и служб → OpenSSH → Operational (Event Viewer → Applications and Services Logs → OpenSSH → Operational) — обычно там указана причина, например неверный владелец файла или права доступа.

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

Служба sshd не запущена, нет правила в брандмауэре или вы подключаетесь не к тому порту. Выполните Test-NetConnection 203.0.113.10 -Port 22 на своём компьютере и Get-Service sshd на сервере.

Можно ли и дальше пользоваться удалённым рабочим столом?

Да. SSH и удалённый рабочий стол работают параллельно. Многие администраторы используют SSH для скриптов и передачи файлов, а удалённый рабочий стол оставляют для графических инструментов.

Если проблема не решена, создайте тикет — техническая поддержка IMIDC работает 24/7. Укажите IP сервера, версию Windows Server, выполненную команду SSH и полный вывод ошибки (подробности покажет ssh -v), чтобы мы быстрее нашли причину.

Помог ли вам данный ответ?

Похожие руководства