Да, вот полный рецепт. На Windows «рут» — это пользователь из группы «Администраторы», и у ключей для админов есть важная особенность: они лежат не в ~/.ssh/authorized_keys, а в общем файле C:\ProgramData\ssh\administrators_authorized_keys.

1. На Mac — сгенерируй ключ (если ещё нет):

ssh-keygen -t ed25519
cat ~/.ssh/id_ed25519.pub   # скопируй эту строку

2. На Windows (PowerShell от администратора) — добавь публичный ключ:

# Вставь сюда содержимое своего id_ed25519.pub
$key = "ssh-ed25519 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDa7sXphO30bVOxzsZYWIf5xfkY/Z8ZWl42cgSqLBMhlddHR2L8EbWK7SS///M9izu1kpl6jauVuZZkE45nIrY0TlF67BGmiYLqf938JF5pOYISDiPRN4bT7d1+kj9H2In84PDgHbj4hLoPhEzFILTzly8Evw66fLzQa4PonROoMp5ii/CVZHwNxOEJZzJ+5L0aOpCc6lKmllPsJIQVMd1HKFbXB0ZQv2MeHgrcQoHM4xget1m0xcpp+uMnGsr+V7NFJ9cDr9B1WQP+VQ9rhzzx27R/kJNK4Z5JmUb3z1o7v5pNbkDehaRO9epme5wsPN2Arwiia3UXKjnFif07CkuXCYpoyvyeAIj3qlMZ873jW/0KZXt38THCHLQw00jjD3bjmsork8QAV4hXdek1JEVF6fWGxOsIq7Z3PQXC5+63OgHTEH6NElNU10XzvVNOdut/mHA4QxvVDtsAg8oJRmGlVhWoHZy73KY0+6xsWROSlKTihn9uE4FAwLXlQC4rIEM= threed@MacBook-Air-Aleksandr.local"

Add-Content -Force -Path C:\ProgramData\ssh\administrators_authorized_keys -Value $key

# КРИТИЧНО: правильные права на файл, иначе sshd его проигнорирует
icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r /grant "SYSTEM:F" /grant "Administrators:F"

Если система русская и icacls ругается на имена групп, используй /grant "*S-1-5-18:F" /grant "*S-1-5-32-544:F" (это SID'ы SYSTEM и Администраторов, работают на любом языке).

3. Проверь C:\ProgramData\ssh\sshd_config — в конце должен быть незакомментированный блок (он там есть по умолчанию, просто убедись):

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

4. Отключи вход по паролю (это и есть «без пароля, только ключ») — в том же sshd_config:

PasswordAuthentication no
PubkeyAuthentication yes

и перезапусти службу:

Restart-Service sshd

⚠️ Отключай пароль только после того, как проверил, что вход по ключу работает — иначе можно запереть себя снаружи (если нет физического доступа к машине).

5. На Mac проверь и добавь хост в ~/.ssh/config для удобства:

Host win
    HostName 192.168.x.x
    User ИмяПользователя
    IdentityFile ~/.ssh/id_ed25519

Теперь ssh win — и ты внутри без пароля.

Приятный бонус: в отличие от локального сеанса, по SSH админ на Windows сразу получает повышенный токен — UAC-запросов не будет, все команды выполняются с полными правами. То есть после этого я смогу подключиться и сделать всю чистку Windows 11, о которой говорили. Скажи IP и имя пользователя, когда всё настроишь.
       
       
       
       
           
           В PowerShell от администратора:

# Восстановить конфиг из шаблона
Copy-Item C:\Windows\System32\OpenSSH\sshd_config_default C:\ProgramData\ssh\sshd_config -Force

# Перезапустить службу
Restart-Service sshd

В этом шаблоне уже есть нужный блок Match Group administrators с administrators_authorized_keys — то есть после восстановления всё из моей прошлой инструкции работает как описано.

Если вдруг шаблона нет (Test-Path C:\Windows\System32\OpenSSH\sshd_config_default вернёт False), просто вставь в пустой файл вот это (notepad C:\ProgramData\ssh\sshd_config из того же админского PowerShell):

PubkeyAuthentication yes
PasswordAuthentication yes

Subsystem sftp sftp-server.exe

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

(PasswordAuthentication no поставишь потом, когда проверишь вход по ключу.)

После перезапуска проверь, что служба жива:

Get-Service sshd          # должно быть Running

Если Restart-Service падает с ошибкой — покажи вывод sshd -T (запусти прямо так: C:\Windows\System32\OpenSSH\sshd.exe -T), он скажет, на какой строке конфига проблема. Ещё бывает, что в C:\ProgramData\ssh отсутствуют хост-ключи (ssh_host_*_key) — при успешном старте службы они генерируются автоматически, отдельно делать ничего не нужно.



# Установить OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# Запустить службу и включить автозапуск
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

# Проверить, что файрвол пропускает порт 22 (правило обычно создаётся само)
Get-NetFirewallRule -Name *ssh*

Вот что убедиться и починить. На Windows-машине, в PowerShell от администратора:

$f = "C:\ProgramData\ssh\administrators_authorized_keys"

# 1. Показать, что реально лежит в файле (должна быть ОДНА строка ssh-rsa AAAA...)
Get-Content $f

# 2. Сбросить права: только SYSTEM и Администраторы (SID работают на любом языке ОС)
icacls $f /inheritance:r /grant "*S-1-5-18:F" /grant "*S-1-5-32-544:F"

# 3. Перезапустить службу
Restart-Service sshd

Для сверки — вот твой публичный ключ на Mac, именно эта строка целиком (без переносов) должна быть в файле:
       

    
    
        Да, задай пароль — это правильный шаг, и вот почему. У Windows есть включённая по умолчанию политика «Учётные записи: разрешать использование пустых паролей только при консольном входе». Она блокирует любой сетевой вход под учёткой с пустым паролем — а вход по SSH считается сетевым. То есть даже с идеально настроенным ключом машина может отказать именно из-за пустого пароля. Так что пароль нужен в любом случае для надёжного удалённого доступа.

Задать пароль — в PowerShell на Windows:

net user zelenski *

Команда дважды спросит новый пароль (при вводе символы не отображаются — это нормально).

Но: судя по verbose-логу, текущий отказ происходит раньше — на этапе сверки ключа (сервер отвергает ключ сразу, не доходя до входа). Это указывает на права/содержимое administrators_authorized_keys, а не на пароль. Поэтому лучше сделать и то, и другое за один заход:

# 1. Пароль
net user zelenski *

# 2. Права на файл ключей
$f = "C:\ProgramData\ssh\administrators_authorized_keys"
Get-Content $f          # проверь: одна строка ssh-rsa AAAA... threed@MacBook-Air-Aleksandr.local
icacls $f /inheritance:r /grant "*S-1-5-18:F" /grant "*S-1-5-32-544:F"

# 3. Перезапуск
Restart-Service sshd

Как выполнишь — скажи, я сразу повторю подключение по ключу. Пароль при этом у меня спрашиваться не будет (вход всё равно по ключу), он просто снимает блокировку сетевого входа.
    
    
    
        Ключ по-прежнему отвергается на этапе сверки (нет строки «Server accepts key»), значит дело не в пароле и не в логоне, а именно в файле administrators_authorized_keys — либо права всё ещё не те, либо содержимое не совпадает. Хватит гадать — точную причину скажет лог sshd. Выполни на Windows (PowerShell) и покажи вывод:

Get-WinEvent -LogName "OpenSSH/Operational" -MaxEvents 15 | Format-List TimeCreated, Id, Message

Там будет прямая формулировка. Ожидаю одно из двух:

- Authentication refused: bad ownership or modes for file ... или Permission denied по файлу → права ещё не применились. Тогда проверь, что файл вообще там, где надо, и добей права заодно с папкой:
icacls C:\ProgramData\ssh\administrators_authorized_keys
- (в выводе должны быть только NT AUTHORITY\SYSTEM и BUILTIN\Администраторы/Administrators, и никаких NT AUTHORITY\Authenticated Users, BUILTIN\Users, zelenski).
- key not in file / no matching key found → содержимое не совпадает. Тогда перезапиши файл ключом заново одной командой (заодно исключим кривые переносы и лишние пробелы):
Set-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDa7sXphO30bVOxzsZYWIf5xfkY/Z8ZWl42cgSqLBMhlddHR2L8EbWK7SS///M9izu1kpl6jauVuZZkE45nIrY0TlF67BGmiYLqf938JF5pOYISDiPRN4bT7d1+kj9H2In84PDgHbj4hLoPhEzFILTzly8Evw66fLzQa4PonROoMp5ii/CVZHwNxOEJZzJ+5L0aOpCc6lKmllPsJIQVMd1HKFbXB0ZQv2MeHgrcQoHM4xget1m0xcpp+uMnGsr+V7NFJ9cDr9B1WQP+VQ9rhzzx27R/kJNK4Z5JmUb3z1o7v5pNbkDehaRO9epme5wsPN2Arwiia3UXKjnFif07CkuXCYpoyvyeAIj3qlMZ873jW/0KZXt38THCHLQw00jjD3bjmsork8QAV4hXdek1JEVF6fWGxOsIq7Z3PQXC5+63OgHTEH6NElNU10XzvVNOdut/mHA4QxvVDtsAg8oJRmGlVhWoHZy73KY0+6xsWROSlKTihn9uE4FAwLXlQC4rIEM= threed@MacBook-Air-Aleksandr.local'

icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r /grant "*S-1-5-18:F" /grant "*S-1-5-32-544:F"
Restart-Service sshd

Покажи вывод лога — по нему сразу станет ясно, каким путём идём.