Найти в Дзене
about IT

Винда и аутентификация по ключу

В windows появилась возможность завезти openssh (набор утилит для shh). Ставится на раз Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 либо на два, если нужен сервер Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 Кому лень ходить в доку, нужно сделать еще пару приседаний от имени админа Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic' Get-NetFirewallRule -Name *ssh* New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 Далее можно смело топать куда нибудь по ssh Ssh username@servername Если это Ваш первый поход на сервер, нужно будет кивнуть на вопрос системы Поздравляем, теперь вы можете делать то, что все нормальные люди могли лет 30 назад. Конфиг, кстати, лежит вот тут %programdata%\ssh\sshd_config Почитать чуть подробней про то, что там вообще происходит и про список ограничений (ну куда без него) можно тут Теперь переходим к интересно

В windows появилась возможность завезти openssh (набор утилит для shh). Ставится на раз

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

либо на два, если нужен сервер

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Кому лень ходить в доку, нужно сделать еще пару приседаний от имени админа

Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
Get-NetFirewallRule -Name *ssh*
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Далее можно смело топать куда нибудь по ssh

Ssh username@servername

Если это Ваш первый поход на сервер, нужно будет кивнуть на вопрос системы

Поздравляем, теперь вы можете делать то, что все нормальные люди могли лет 30 назад. Конфиг, кстати, лежит вот тут

%programdata%\ssh\sshd_config

Почитать чуть подробней про то, что там вообще происходит и про список ограничений (ну куда без него) можно тут

Теперь переходим к интересному. Всё это затевалось не столько для того что бы вы ходили из консоли руками куда то, маленькие любители RDPшнуться к серваку (вам там его в windows server hyper-v зарезали и даже гуй не завезли, как теперь жить хз), сколько для добавления на клиенте и сервере ключей и безболезненного хождения скриптов на сервера без пароля.

Ставим

Install-Module -Force OpenSSHUtils -Scope AllUsers
Start-Service ssh-agent
-2
Start-Service sshd

Далее можно генерить пару ключей

cd ~\.ssh\
ssh-keygen

должен поступить ответ о том, что пара ключей создана. Тут можно повтыкать в чудесную графическую интерпритация вашего ключа

-3

Проверяем что у вас всё еще не упал

Get-Service ssh-agent

Добавляем закрытый ключ к себе в агента

ssh-add ~\.ssh\id_ed25519

Вот тут нужно понимать, что закрытый ключ как таковой теперь вам не нужен, можете в принципе и удалить. Если решите сохранить, берегите за семью печатями (кинуть приватный ключ на яндекс диск или в открытый репозиторий гитхаба будет не самым лучшим вашим решением)

-4

Далее нужно будет публичный ключ раскидать везде, куда вы хотите по нему сходить, под винду это выглядит вот так

ssh user1@domain1@contoso.com mkdir C:\users\user1\.ssh\
scp C:\Users\user1\.ssh\id_ed25519.pub user1@domain1@contoso.com:C:\Users\user1\.ssh\authorized_keys
ssh --% user1@domain1@contoso.com powershell -c $ConfirmPreference = 'None'; Repair-AuthorizedKeyPermission C:\Users\user1\.ssh\authorized_keys

Под линух всё еще проще и нужно будет дослать в ваш домашний каталог \.ssh\ файл authorized_keys с публичным ключом.

И можно было бы идти радоваться, но нет

-5

в 2018 году они всё сломали, и линух такую пару ключей не примет. В 2020 обещают поправить в конце года, а пока генерировать ключ можно вот так

ssh-keygen -t ecdsa -b 521

Теперь у вас есть все блага цивилизации, такие как человеческий ssh по ключу, scp всё с тем же ключом для копирования файлов в/из линуха и как бонус, vs code для ssh использует всё тот же OpenSSH и так же будет ходить по ключу, собственно как и остальные программы его использующие.