Teh Hermit

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ssh-сервер_на_windows [2025/04/14 11:13] jpssh-сервер_на_windows [2025/10/01 14:04] (current) jp
Line 1: Line 1:
 ===== SSH-сервер на Windows ===== ===== SSH-сервер на Windows =====
  
-На Windows, начиная с серверной редакции Windows Server 2019 и десктопной версии Windows 10 1803 - доступен SSH-сервер в качестве отдельного //on-demand// компонента.+На //Windows//, начиная с серверной редакции //Windows Server 2019// и десктопной версии //Windows 10 1803// - доступен //SSH//-сервер в качестве отдельного //on-demand// компонента.
  
 Установить его можно следующим образом: Установить его можно следующим образом:
Line 9: Line 9:
  
    dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0    dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0
 +Или загрузив вручную отсюда:
 +
 +https://github.com/PowerShell/Win32-OpenSSH/releases/
 +
 Проверить установку можно так:  Проверить установку можно так: 
  
    Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'    Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'
-После установки можно сделать автоматический запуск службы запустить сервис. +Если установщик по каким-либо причинам не сделал автозапуск службы, делаем и запускаем сервис. 
  
    Set-Service -Name sshd -StartupType 'Automatic'    Set-Service -Name sshd -StartupType 'Automatic'
    Start-Service sshd    Start-Service sshd
-Для работы SSH-сервера через FW можно создать соответствующее правило командой:+Для работы SSH-сервера через FW можно создать соответствующее правило командой (установщик, вероятно, уже его создал):
  
 <WRAP prewrap> <WRAP prewrap>
Line 29: Line 33:
  
    AllowGroups "ARASAKA\Domain Admins"    AllowGroups "ARASAKA\Domain Admins"
 +:!: ВАЖНО. Добавлять директиву в самом конце файла конфигурации - плохая идея, т.к. она будет интерпретирована как часть секции //match//. Пример работающей секции:
 +;#;
 +{{:ms:windows_ssh_server_allow_group.jpg?600|}}
 +;#;
 +
 +Разрешения можно установить и на конкретного пользователя, а не только на группу. В этом случае директива будет выглядеть так:
 +
 +   AllowUsers "ARASAKA\jp"
 +:!: ВАЖНО. Здесь используется короткое имя домена (//pre-windows 2000//). Его можно посмотреть в свойствах домена в //AD DS//.
 +=== Замена оболочки CMD ===
 +
 +По умолчанию при подключении будет работать стандартный командный интерпретатор CMD. Если мы хотим использовать PowerShell, следует заменить оболочку следующей командой:
 +<WRAP prewrap>
 +<code>
 +New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String –Force
 +</code>
 +</WRAP>
 +=== Подключение с ипользованием SecureCRT ===
 +Если мы постоянно подключаемся к Exchange через, скажем, //SecureCRT// - очень удобно автоматизировать запуск команды при подключении, чтобы не вводить её вручную каждый раз. Пример:
 +
 +;#;
 +{{:soft:logon_ssh_windows_ems.jpg?600|}}
 +;#;
 +
 +Здесь для запуска командлетов //Exchange// - прописана такая команда:
 +
 +   Add-PSsnapin Microsoft.Exchange.Management.PowerShell.E2010
 +
 +:!: ВПРОЧЕМ, такой способ не является полноценным подключением к //EMS//. В этом случае, скорее всего не будут корректно работать командлеты, запуск которых предполагается вне локального сервера. К примеру, если у нас несколько //Exchange// с распределенными базами и почтовый ящик пользователя находится не на том сервере, к которому мы подключились по //SSH// - командлет завершится с ошибкой.
 +
 +Стандартный //EMS// shell, запускаемый в Windows умеет это разруливать. Корректным полноценным способом подключения к //EMS// по //SSH// из //SecureCRT// - будет запуск скрипта //RemoteExchange.ps// и последующее использование командлета //Connect-ExchangeServer// сразу же после соединения по //SSH//. Таким образом, нам необходимо добавить два send-действия в SecureCRT, которые выглядят так:
 +
 +   1. . 'C:\\Program Files\\Microsoft\\Exchange Server\\V15\\bin\\RemoteExchange.ps1' 
 +   2. Connect-ExchangeServer -auto -ClientApplication:ManagementShell
 +Пример:
 +;#;
 +{{:soft:connect_exchange_securecrt_remoteps.jpg|}}
 +;#;
 +
 +----
 +==== Решение проблем ====
 +
 +=== Меняем поведение backspace ===
 + 
 +На одном из серверов с //OpenSSH// под //Windows// возникла странная проблема. С установленным //DefaultShell// = //PowerShell//, при подключении из //SecureCRT// - клавиша //BACKSPACE// удаляла слова целиком, а по нажатии //CTRL + BACKSPACE// - удалялись символы, т.е. привычное поведение клавиш было перепутано. При этом, сессия для проверки была полностью скопирована с похожего сервера, в её свойствах был заменен исключительно хост подключения. Единственное решение, которое помогло - сделать кастомный ремаппинг в терминале. Делаем следуюшее в //Mapped Keys//:
 +
 +  CTRL + BACKSPACE: \010
 +  BACKSPACE: \177
 +Пример на скрине:
 +;#;
 +{{:soft:sec_crt_backspace_remap.jpg|}}
 +;#;
 +{{tag>Microsoft Windows Firewall SSH PowerShell ActiveDirectory SecureCRT}}
ssh-сервер_на_windows.1744629220.txt.gz · Last modified: by jp