В этой статье описывается настройка сервера OpenSSH (sshd) для ОС Windows.
Для OpenSSH предоставляется подробная документация по параметрам конфигурации на веб-сайте OpenSSH.com, и мы не намерены дублировать ее в этом пакете документации.
Настройка стандартной оболочки OpenSSH для Windows
Стандартная оболочка командной строки предоставляет пользователю интерфейс, который он увидит при подключении к серверу по протоколу SSH. По умолчанию в среде Windows изначально используется командная оболочка Windows (cmd.exe). Кроме того, Windows включает PowerShell и Bash, и вы можете настроить в качестве оболочки по умолчанию для сервера любую из оболочек командной строки сторонних производителей, которые предоставляются для Windows.
Чтобы задать командную оболочку по умолчанию, для начала убедитесь, что папка установки OpenSSH находится в системном пути. В среде Windows по умолчанию она устанавливается в папку SystemDrive:WindowsDirectorySystem32openssh. Следующие команды позволяют узнать текущее значение пути (переменную среды path) и добавить к нему стандартную папку установки OpenSSH.
Linux — SSH подключение к удаленному Linux с Linux и Windows
Команда | путь |
PowerShell | $env:path |
Настройка оболочки SSH по умолчанию выполняется в реестре Windows, где вам нужно добавить полный путь к исполняемому файлу оболочки в строковое значение DefaultShell в разделе ComputerHKEY_LOCAL_MACHINESOFTWAREOpenSSH.
Например, следующая команда PowerShell устанавливает PowerShell.exe в качестве оболочки по умолчанию:
New-ItemProperty -Path «HKLM:SOFTWAREOpenSSH» -Name DefaultShell -Value «C:WindowsSystem32WindowsPowerShellv1.0powershell.exe» -PropertyType String -Force
Конфигурация Windows в файле sshd_config
В среде Windows программа sshd по умолчанию считывает данные конфигурации из файла %programdata%sshsshd_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.
Пользователи и группы, входящие в рабочие группы, а также подключенные к Интернету учетные записи всегда разрешаются в имена локальных учетных записей (без сегмента домена, примерно как стандартные имена в UNIX). Пользователи и группы домена строго разрешаются в формат NameSamCompatible, то есть «короткое_имя_доменаимя_пользователя». Все правила конфигурации для пользователей и групп должны соответствовать этому формату.
Настраиваем аутентификацию SSH по ключу в Linux / Unix
Примеры для пользователей и групп домена
Примеры для локальных пользователей и групп
AuthenticationMethods
Для OpenSSH в Windows поддерживаются только методы проверки подлинности «password» и «publickey».
AuthorizedKeysFile
По умолчанию используется значение .ssh/authorized_keys .ssh/authorized_keys2. Если путь не является абсолютным, он вычисляется относительно основного каталога пользователя (или пути к образу профиля). Например: c:usersuser. Обратите внимание, что если пользователь входит в группу администраторов, используется %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%sshlogs. Любое другое значение, включая используемое по умолчанию AUTH, направляет журналы в ETW. Дополнительные сведения см. в статье о возможностях по ведению журнала в Windows.
Не поддерживается
Следующие параметры конфигурации недоступны в версии OpenSSH, которая поставляется в составе Windows Server 2019 и Windows 10 версии 1809:
- AcceptEnv
- AllowStreamLocalForwarding
- AuthorizedKeysCommand
- AuthorizedKeysCommandUser
- AuthorizedPrincipalsCommand
- AuthorizedPrincipalsCommandUser
- сжатие;
- ExposeAuthInfo
- GSSAPIAuthentication
- GSSAPICleanupCredentials
- GSSAPIStrictAcceptorCheck
- HostbasedAcceptedKeyTypes
- HostbasedAuthentication
- HostbasedUsesNameFromPacketOnly
- IgnoreRhosts
- IgnoreUserKnownHosts
- KbdInteractiveAuthentication
- KerberosAuthentication
- KerberosGetAFSToken
- KerberosOrLocalPasswd
- KerberosTicketCleanup
- PermitTunnel
- PermitUserEnvironment
- PermitUserRC
- PidFile
- PrintLastLog
- RDomain
- StreamLocalBindMask
- StreamLocalBindUnlink
- StrictModes
- X11DisplayOffset
- X11Forwarding
- X11UseLocalhost
- XAuthLocation
Источник: learn.microsoft.com
Как использовать конфигурационный файл SSH
Мануал
Автор cryptoparty На чтение 5 мин Опубликовано 28.07.2021
Secure Shell (SSH) – один из наиболее часто используемых и защищенных способов подключения к удаленному серверу.
Подключиться к удаленному серверу с помощью SSH легко, но что если вы хотите подключаться к разным серверам и делаете это часто.
Становится трудно запоминать все IP-адреса, имена пользователей, команды и пароли.
Чтобы решить эту проблему, SSH позволяет настраивать и использовать конфигурационный файл ssh для различных случаев использования.
SSH использует системный и пользовательский или специфический для пользователя конфигурационный файл.
Вы можете настраивать и конфигурировать параметры соединения на стороне клиента и хранить информацию о каждом удаленном сервере, с которым вы соединяетесь.
В сегодняшней статье мы расскажем, как использовать конфигурационный файл ssh, и объясним некоторые общие параметры конфигурации.
С помощью файла конфигурации SSH вы можете определять и хранить настройки для конкретных удаленных машин.
Это избавляет от необходимости отслеживать каждую информацию, такую как пароль, имя пользователя, IP-адрес и т.д., необходимую для соединения с удаленным сервером.
Где находится файл конфигурации SSH
Итак, как мы уже говорили, в SSH доступны два типа конфигурационных файлов – общесистемные и пользовательские (Custom).
И их расположение следующее:
- Общесистемный конфигурационный файл: Этот файл в основном содержит информацию по умолчанию, которая применяется ко всем пользователям системы, и вы можете найти его по адресу /etc/ssh/ssh_config.
- Конфигурационный файл для конкретного пользователя или пользовательский конфигурационный файл: Этот файл конфигурации специфичен для конкретного пользователя, и в этой статье мы сосредоточимся на этом файле.
Каждый пользователь может поддерживать пользовательский или клиентский файл конфигурации SSH, и он может хранить некоторую общую информацию, которая используется при создании соединения. Этот файл остается в формате чтения и записи для пользователя, и другие не могут получить к нему доступ.
Клиентский или пользовательский файл конфигурации хранится в домашнем каталоге пользователя в директории ~/.ssh.
Вы найдете его здесь – ~/.ssh/config или $HOME/.ssh/config
По умолчанию конфигурационный файл для конкретного пользователя не существует.
Поэтому вы можете создать его с помощью этой команды:
touch ~/.ssh/config
Также, если вы не нашли каталог ~/.ssh, вы можете создать его с помощью этой команды:
mkdir -p ~/.ssh chmod 0700 ~/.ssh
Понимание структуры конфига SSH
Файл специфичен для каждого хоста и содержит информацию, связанную с соединением с сервером.
Каждый раздел начинается с определения заголовка для хоста, за которым следует информация и значения, которые должны быть подобраны для соединений.
Формат файла будет выглядеть следующим образом:
Host Host1 ssh_option1 Value Custom Value ssh_option2 Value Custom Value ssh_option3 Value Custom Value Host Host2 ssh_value Value Custom Value Host * Ssh_option Value Custom Value
Как работает конфигурационный файл SSH
Обычно, если вы хотите подключиться к удаленному серверу, вы используете эту команду:
Запомнить имя хоста и IP-адрес всех серверов, к которым вы подключаетесь, – задача не из легких.
Поэтому с помощью конфигурационного файла вы можете подключаться с помощью одной команды.
ssh hostname
SSH будет использовать информацию из конфигурационного файла для подключения к удаленному серверу.
Итак, давайте разберемся, как работает конфигурационный файл.
Например, если вы выполните следующую команду:
ssh Host1
SSH сначала сопоставит имя хоста с каждым хостом, упомянутым в конфигурационном файле, по принципу “сверху вниз” и найдет заголовок Host1.
Как только SSH найдет соответствие для Host1, он проверит и другие хосты, если есть другие похожие совпадения.
Если других совпадений нет, SSH будет интерпретировать значения опций, упомянутых в Host1, для соединения с сервером.
Использование конфигурационного файла SSH
Теперь мы знаем, что такое конфиг SSH и как он работает.
Теперь давайте разберемся, как его можно использовать для упрощения среды удаленного подключения.
Откройте файл конфигурации в редакторе.
vi ~/.ssh/config
В нем можно задать имя пользователя, IP-адрес и значение порта.
Host Itsecforu HostName 192.167.54.19 Port 2222 Forwardx11 no Host * User itsecforu IdentityFile ~/.ssh/id_rsa Protocol 2 Compression yes ServerAliveInterval 60 ServerAliveCountMax 20 LogLevel Info
Объяснение значений, используемых в файле:
- HostName: IP-адрес узла удаленного сервера, в который вы хотите войти.
- User: Имя пользователя, под которым вы будете входить в систему.
- Port: Порт, к которому вы хотите подключиться на удаленном сервере.
- Protocol: Версия протокола SSH, которую следует предпочесть. Вы можете ввести несколько значений, разделенных запятой.
- IdentityFile: Расположение файла, содержащего идентификаторы RSA, ECDSA и DSA аутентификации пользователя.
- ForwardX11: Позволяет пробросит иксы удаленного сервера на вашей машине.
- Compression Вы хотите использовать сжатие во время соединения с удаленным сервером или нет. Включение этого параметра может быть полезным для вас, если у вас медленное соединение.
- ServerAliveinterval: Используется для установки таймера в секундах для соединения с сервером, и в течение заданного времени, если ответ от сервера не получен, ssh отправит сообщение с запросом ответа.
- ServerAliveCountMax: Устанавливает количество сообщений, которые должны быть отправлены для запроса ответа от сервера.
- LogLevel: Указывает уровень логов, используемый при ведении журнала.
Теперь вы знаете, как один файл конфигурации может быть полезен, если вы часто подключаетесь к удаленным серверам.
Вам не нужно запоминать множество имен хостов, ip-адресов и портов.
Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Источник: itsecforu.ru
Настройка SSH сервера в 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 $HOMEDownloadsOpenSSH-Win64-v8.9.1.0.msi -UseBasicParsing
msiexec /i c:usersrootdownloadsOpenSSH-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:WindowsSystem32OpenSSH (sshd.exe, ssh.exe, ssh-keygen.exe, sftp.exe и т.д.)
- Конфигурационный файл sshd_config (создается после первого запуска службы): C:ProgramDatassh
- Файлы authorized_keys и ssh ключи можно хранить в профиле пользователей: %USERPROFILE%.ssh
Sshd_config: Конфигурационный файл сервера OpenSSH
Настройки сервере OpenSSH хранятся в конфигурационном файле %programdata%sshsshd_config. Это обычный текстовый файл с набором директив. Для редактирования можно использовать любой текстовый редактор (я предпочитаю notepad++). Можно открыть с помощью обычного блокнота:
start-process notepad C:Programdatasshsshd_config
Например, чтобы запретить SSH подключение для определенного доменного пользователя (и всех пользователей указанного домена), добавьте в конце файле директивы:
Чтобы разрешить подключение только для определенной доменной группы:
AllowGroups winitprosshadmins
Либо можете разрешить доступ для локальной группы:
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:
Подключение по SSH к Windows компьютеру
Теперь вы можете попробовать подключиться к своей Windows 10 через SSH клиент (в этом примере я использую putty).
Вы можете использовать встроенный SSH клиентом Windows для подключения к удаленному хосту. Для этого нужно в командной строке выполнить команду:
В этом примере alexbel – имя пользователя на удаленном Windows компьютере, и 192.168.31.102 – IP адрес или DNS имя компьютера.
Обратите внимание что можно использовать следующие форматы имен пользователей Windows при подключении через SSH:
В домене Active Directory можно использовать Kerberos аутентификацию в SSH. Для этого в sshd_config нужно включить параметр:
GSSAPIAuthentication yes
После этого можно прозрачно подключать к SSH сервер с Windows компьютера в домене из сессии доменного подключается. В этом случае пароль пользователя не указывается и выполняется SSO аутентификация через Kerberos:
При первом подключении появится стандартный запрос на добавление узла в список известных SSH хостов.
Нажимаем Да, и в открывшееся окне авторизуемся под пользователем Windows.
При успешном подключении запускается командная оболочка cmd.exe со строкой-приглашением.
В командной строке вы можете выполнять различные команды, запускать скрипты и программы.
Я предпочитаю работать в командной строке PowerShell. Чтобы запустить интерпретатор PowerShell, выполните:
Чтобы изменить командную оболочку (Shell) по умолчанию в OpenSSH с cmd.exe на PowerShell, внесите изменение в реестр такой командой:
New-ItemProperty -Path «HKLM:SOFTWAREOpenSSH» -Name DefaultShell -Value «C:WindowsSystem32WindowsPowerShellv1.0powershell.exe» -PropertyType String –Force
Осталось перезапустить SSH подключение и убедиться, что при подключении используется командный интерпретатор PowerShell (об этом свидетельствует приглашение PS C:Usersadmin> ).
В SSH сессии запустилась командная строка PowerShell, в которой работают привычные функции: авто дополнение, раскраска модулем PSReadLine, история команд и т.д. Если текущий пользователь входит в группу локальных администраторов, то все команды в его сессии выполняются с повышенными правами даже при включенном UAC.
OpenSSH сервер в Windows можно использовать в различных сценариях SSH туннелирования.
Логи 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:ProgramDatasshlogssshd.log
Источник: the-devops.ru