yubikey – ssh – FIDO

Skoro juz mam cześciowo wdrożone yubikey, to szkoda nie skorzystać z opcji jaką daje czyli logowanie po ssh. Tutaj mamy 3 opcje: PIV, GPG i FIDO. Fido wydawało mi się najlepsze rozwiązanie więc zacząłem od tego, ale oczywiście dalej opisze następne rozwiązania.

Jak przygotowywałem sie do tego znalazłem gdzieś informację że po pierwsze wersja ssh musi być co najmniej 8.1 jak i windows nie wspiera tego, jednak udało mi sie to uruchomić na windows.

Na codzień pracuję pod kontrola MS więc windows jest moja stacją, jednak do logowania sotsuję ssh (tutaj na tą chwile jest mobaxterm) a czasem potrzebuję wykonać coś na plikacha z poziomu linux’a ( np. ansible-vault) wiec mam WSL debian. Działa to w miarę. Zacząłem od instalacji Yubikey managet cli pod windows’a i sprawdziłem sobie czy mój yubikey wspiera fido, zatem:

ykman.exe info
Device type: YubiKey 5C NFC
Serial number:
Firmware version:
Form factor: Keychain (USB-C)
Enabled USB interfaces: OTP, FIDO, CCID
NFC transport is enabled

Applications USB NFC
Yubico OTP Enabled Enabled
FIDO U2F Enabled Enabled
FIDO2 Enabled Enabled
OATH Enabled Enabled
PIV Enabled Enabled
OpenPGP Enabled Enabled
YubiHSM Auth Enabled Enabled

No to zaczynamy od generowania klucza, tutaj mamy możliwość wykorzystania ecdsa-sk lub ed25519-sk, dodatek sk informuyje że bedzie klucz wspierał zewnetrzny fizyczny klucz:

ssh-keygen -t ed25519-sk
Generating public/private ed25519-sk key pair.
You may need to touch your authenticator to authorize key generation.
Enter file in which to save the key (/home/mobaxterm/.ssh/id_ed25519_sk):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/mobaxterm/.ssh/id_ed25519_sk
Your public key has been saved in /home/mobaxterm/.ssh/id_ed25519_sk.pub
The key fingerprint is:
SHA256:+DwP0wiLLKNJaseUc7Ed6Hrz+dbMhW3Dlz+2I9dKZkE
The key’s randomart image is:
+[ED25519-SK 256]-+
| |
| |
| . E |
| o o . |
| o * S + . .|
| = = * o . * + |
| .= * . B = o * o|
|o+ * o .* + = =o|
|= . . ooo.. =o+|
+—-[SHA256]—–+

podczas generowania kluczy nie podawałem hasła, a to dlatego że i tak potrzeba konkretny klucz fizyczny aby można było wykorzystać logowanie do serwera. No to teraz zajrzyjmy sobie na klucz prywatny:

cat /home/mobaxterm/.ssh/id_ed25519_sk
—–BEGIN OPENSSH PRIVATE KEY—–
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAASgAAABpzay1zc2
gtZWQyNTUxOUBvcGVuc3NoLmNvbQAAACCN+JCfo/OJDoSNfgclw4rbrC1YDrIXUHiBla6c
16DZ6AAAAARzc2g6AAAA+LOSOYqzkjmKAAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY2
9tAAAAII34kJ+j84kOhI1+ByXDitusLVgOshdQeIGVrpzXoNnoAAAABHNzaDoBAAAAgDWz
sL0KoudkwbPt5ZP1SE4NbggToji8tbIqDPaC9V9sG4VRxg9OKC4Iv08poK1MB5Te4cWG3E
jFxuL/ve2WplJ1nitfnVozVfrqXmAdJNEXSC2xbzxqph8pMltc3Xgk4CJgfxcICnqvoLqp
FuNO4RCCzc94QD5xcAXRA0URwh1ZAAAAAAAAABZkamFuaWNraUBQTC01Q0QwMjcxNVZRAQ
ID
—–END OPENSSH PRIVATE KEY—–

No i teraz każdy co on zrobił udostepnił klucz prywatny, zatem:

  1. to jest testowy klucz prywatny
  2. nie do końca jest to klucz prywatny a wskazówka aby do logowania wykorzystać fido z klucza i to dokładnie jednego
  3. ale oczywiście po cały opisie yubikey zostanie zrestartowany i nawet jak nie mozna wykorzystac nie udostępniłał bym klucza prywatnego, dzisiaj nie można a może w przyszłości bedzie można, nie ma potrzeby nie udostepniaj.

No to teraz mamy już też i klucz publiczny który można dodąc do konfiguracji serwera, w moim przypadku do pliku ~/.ssh/authorized_keys i testowanie, czyli

ssh -i /home/mobaxterm/.ssh/id_ed25519_sk username@IP_SERWERA

po potwierdzeniu że chce skożystac z klucza fizycznego i dotknieciu klucza yubikey udało mi sie zalogować. No to teraz dodajmy to do agenta i tutaj mobaxterm mnie zwiódł bo mam komunikat że nie mogę dodać. Oczywiście mogę dodąc do pliku konfiguracyjnego, czy wskazać podczas wykonywania komendy, ale nie zadziała mi jako agent kluczy, a to tez jest fajna opcja, aby wykorzystywać, zwieksza bezpieczeństwo jak i daje informacje kto na danego user’a sie zalogował. Zatem przeniosłem klucz na Linux’a i tuatj zaskoczenie, działa bez problemu. No to spróbowałem jeszcze pageant.exe jednak to samo nie chce załadować. Zatem odpaliłem powershell i próbowałem dodać ten klucz z poziomu powershell’a no i po ustawieniu odpowiednich uprawnień udało mi się dodac klucz, tylko za bardzo nie lubie powershell zatem i komunikowania sie po ssh poprzez powershell.

Zatem podsumowując, jest łatwa konfiguracja, uzywanie, jednak brak pełnego wsparcia (agent’a) daje mu minus. Tak samo backup, tutaj jak zgubie klucz to albo mam na serwerze drugi publiczny klucz albo nie zaloguje się po kluczu bo nie mam drugiego.