Перейти к содержанию

▍YubiKey 5C Nano

FIDO2 PIN в YubiKey Manager

Настройка 2FA TOTP для подключения к серверу по SSH в MacOS

Для начала проверим есть ли поддержка ключей sk-ssh-ed25519:

daffin@MacBook-Air-Aleksej .ssh % ssh -Q key|grep ^sk
[email protected]
[email protected]
[email protected]
[email protected]
Нам нужна версия OpenSSH 8.2 и выше:
% brew install openssh opensc

% ssh -V
OpenSSH_9.7p1, OpenSSL 3.3.0 9 Apr 2024

Для использования с ключом безопасности ssh-agent должен быть версии 8.2, которого нет в системе по умолчанию.

Сначала отключите ssh-агент, который есть в macOS по умолчанию для вашего пользователя.

launchctl disable user/$UID/com.openssh.ssh-agent

Затем добавьте новый сервис launchd для вашего ssh-агента, создав новый файл ~/Library/LaunchAgents/com.zerowidth.launched.ssh_agent.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.zerowidth.launched.ssh_agent</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>/opt/homebrew/bin/ssh-agent -D -a ~/.ssh/agent -P /opt/homebrew/lib/*,/opt/homebrew/Cellar/opensc/*/lib/*.so</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>
И загрузите его с помощью

launchctl load -w ~/Library/LaunchAgents/com.zerowidth.launched.ssh_agent.plist

Далее в одном из файлов .bashrc или .zshrc, необходимо прописать

SSH_AUTH_SOCK="~/.ssh/agent"

Зададим FIDO2 PIN в YubiKey Manager

FIDO2 PIN в YubiKey Manager

Генерируем ключи

% ssh-keygen -t ed25519-sk -O application=ssh:mgr -O resident -f ~/.ssh/mgr

Добавляем ключи, теперь будет запрос на подтверждение (прикоснуться к ключу).

% ssh-add -K
Enter PIN for authenticator:
Resident identity added: ED25519-SK SHA256:CPM0000000000000000000000000000w8

Выгружаем ключи из YubiKey. Кстати, файлы, которые генерирует YubiKey, представляют собой открытый ключ и специальную ссылку на закрытый ключ, а не сам закрытый ключ. Материал закрытого ключа хранится в элементе tokens secure и используется только при аутентификации по ssh (именно поэтому вам нужно подключить свой токен при попытке входа в удаленную систему с помощью FIDO).

daffin@MacBook-Air-Aleksej .ssh % ssh-keygen -K
Enter PIN for authenticator: 
You may need to touch your authenticator to authorize key download.
Enter passphrase (empty for no passphrase)Enter same passphrase again: 
Saved ED25519-SK key ssh:mgr to id_ed25519_sk_rk_mgr

Файл mgr теперь необходимо убрать в труднодоступное место. Он пригодится, если донгл YubiKey будет утерян, тогда с помощью этого приватного ключа можно будет подключиться к серверу.

daffin@MacBook-Air-Aleksej .ssh % ls -la
total 48
drwx------   8 daffin  staff   256 23 май 10:06 .
drwxr-x---+ 22 daffin  staff   704 22 май 17:25 ..
-rw-------   1 daffin  staff   456 23 май 10:06 id_ed25519_sk_rk_mgr
-rw-r--r--   1 daffin  staff   140 23 май 10:06 id_ed25519_sk_rk_mgr.pub
-rw-------   1 daffin  staff  1102 23 май 09:59 known_hosts
-rw-------   1 daffin  staff   928 23 май 09:59 known_hosts.old
-rw-------   1 daffin  staff   488 22 май 17:43 mgr
-rw-r--r--   1 daffin  staff   165 22 май 17:43 mgr.pub

Чтобы использовать SSH-ключ на новом компьютере, убедитесь, что у вас запущен ssh-агент, и просто запустите:

$ ssh-add -K

Это загрузит "дескриптор ключа” в SSH-агент и сделает ключ доступным для использования на новом компьютере, и вы сможете немедленно подключаться к серверам. Это отлично работает для коротких посещений, но это не будет длиться вечно – вам нужно будет снова запустить ssh-add, например, при перезагрузке компьютера. Чтобы импортировать ключ постоянно, вместо этого запустите:

$ ssh-keygen -K
При этом в текущий каталог будут записаны два файла. 

К началу