Первая часть тут: https://t.me/bashdays/1357
Создаём SSH ключ:
ssh-keygen -t ed25519-sk -O resident -C "shuba@bashdays"
Оно запросит у тебя PIN который мы впендюрили в самом начале. Жмем несколько раз Enter и радуемся жизни. Новый приватный ключ создан, записан на Yubikey, публичная же часть ключа упала в
~/.ssh/id_ed25519_sk.pub.ㅤ
Да, рядом будем лежать файл id_ed25519_sk, но это ничего не меняет, это не приватный ключ, приватный ключ НЕ хранится на диске, он сразу записывается в Yubikey. А то что ты видишь у себя на диске, это дескриптор (handle). Этот файл содержит идентификатор Yubikey ключа, параметры и ссылку на resident key. Приватный ключ физически находится внутри YubiKey и не может быть извлечён.
А дальше по классике. Закидываем публичную часть ключа на нужный сервер и пробуем подключиться:
ssh root@bashdays.ru
Confirm user presence for key ED25519-SK
Опа, прикасаемся своим обрубком к Yubikey и успешно подключаемся к серверу. Также можно сгенерить ключ, который не требует прикосновений, либо вообще сгенерить одноразовые пины, но это уже оверхед безопасность.
Про SSH ключи я подробно расписывал в серии постов по тегу #linuxfactory нажми на тег, получишь список всех этих постов. Настоятельно рекомендую ознакомиться, такому в школах не учат. По крайней мере не рассказывают нюансы.
Фиксим баги:
После того как ты достанешь ключ из USB и затем воткнешь обратно. Всё к хуям сломается. Вот такая особенность винды и WSL2. Поэтому делаем финт ушами. Пишем powershell скрипт, который будет это фиксить.
Создаем файл
YubiKeyAttachToWSL.ps1$yubiKeyBusId = (usbipd list | Select-String "1050:0407" |
ForEach-Object { $_.Line.Split()[0] })
if ($yubiKeyBusId) {
usbipd attach --wsl --busid $yubiKeyBusId
Write-Host "YubiKey attached…"
} else {
Write-Host "YubiKey not found."
}
Не забываем изменить ID вендора и продукта. Закидываем скрипт в виндовый планировщик с параметрами:
Триггер:
- At log on (при входе в систему)
- On Event (событие USB)
- Log: System, Source:
WudfUsbccidDrv, Event ID: 104Действие:
- Запуск
powershell.exe с аргументами -ExecutionPolicy Bypass -File "C:\YubiKeyAttachToWSL.ps1"Теперь этот скрипт будет запускать при входе в систему ну и если ты будешь тыркать Yubikey туда-сюда в USB портах. Автоматизация ёпта!
Всё! Поставленная задача успешно решена. Что важно, тут не только потыкали Yubikey + SSH, но и научились прокидывать USB устройства в WSL2.
Всё остальное поищешь сам, информации полно. Я показал тебе лишь неочевидные штуки, которые могут загнать в тупик и свести с ума.
Изучай!
🛠 #security #privacy
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog