YubiKeyとSSH – Ubuntu

macOSに続いてUbuntu 20.04 LTSでed25519-sk鍵タイプを試していきます。

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.3 LTS
Release:	20.04
Codename:	focal

$ ssh -V
OpenSSH_8.2p1 Ubuntu-4ubuntu0.3, OpenSSL 1.1.1f  31 Mar 2020
今回検証に使っているFIDO U2F機能をもつデバイスたち

Contents

Ubuntu: 準備

YubiKeyの選択の仕方は前置きをご覧ください。青いYubiKeyでもFIDO U2FかFIDO2の機能があれば使えるはずです。今回は主にfirmware 5.2.4の青いSecurity Keyシリーズで確認しています。5.2.3未満の場合はecdsa-skでお試しください。 ecdsa-skはP-256楕円曲線だけなので使う理由があるのかは謎です。

OpenSSH 8.2p1(クライアント, サーバ)なのでそのまま使えます。libfido2を追加でインストールします。fido2-token -Lで確認する必要が無ければfido2-toolsは不要です。

$ sudo apt install openssh-client openssh-server libfido2-1 fido2-tools
Reading package lists... Done
.....

$ fido2-token -L
/dev/hidraw0: vendor=0x1050, product=0x0120 (Yubico Security Key by Yubico)

良さそうです。

Ubuntu: クライアント側

クライアント側を整えていきます。

$ ssh-keygen -t ed25519-sk
Generating public/private ed25519-sk key pair.
You may need to touch your authenticator to authorize key generation.
Enter PIN for authenticator: 
Enter file in which to save the key (/home/est/.ssh/id_ed25519_sk): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/est/.ssh/id_ed25519_sk
Your public key has been saved in /home/est/.ssh/id_ed25519_sk.pub
The key fingerprint is:
SHA256:x8znliA8e88Cr3lTMGP9oaAEzvxlfFa/NYhGbJu6xyk est@mors
The key's randomart image is:
+[ED25519-SK 256]-+
|          .      |
|      .    +  .  |
|     + . .o.+... |
|      +..+X=+...o|
|       oS=OB.o .+|
|        +* +o... |
|        .o+.=    |
|         E=B     |
|        ooooo    |
+----[SHA256]-----+

まずYubiKeyのFIDO2 PINを訊かれます。入力するとピカピカ光ってタッチを要求されます。タッチすると鍵情報を保存するファイル名を訊かれます。入力すると鍵情報ファイルを暗号化するためのパスフレーズを訊かれます。このパスフレーズは-O residentを指定した場合のYubiKey内の鍵情報には適用されません。あくまでもファイル(ここでは鍵ハンドルが格納されている~/.ssh/id_ed25519_sk)の暗号化のためのものです。

$ sudo ps -ef | fgrep ssh
root        1557       1  0 11:07 ?        00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
est        13483   13336  0 12:37 pts/0    00:00:00 grep -F --color=auto ssh

$ sudo ps -ef | fgrep keyring
est        12609       1  0 12:37 ?        00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --login
est        13488   13336  0 12:37 pts/0    00:00:00 grep -F --color=auto keyring

$ set | fgrep SSH

$ eval $(gnome-keyring-daemon --replace --components ssh)
** Message: 12:38:36.976: Replacing daemon, using directory: /run/user/2323/keyring

$ set | fgrep SSH
SSH_AUTH_SOCK=/run/user/2323/keyring/ssh
_=SSH_AUTH_SOCK=/run/user/2323/keyring/ssh

$ export SSH_AUTH_SOCK

$ ssh-add -l
The agent has no identities.

macOSのKeychainのような構造ではなく、-sk未対応などどということもないのでそままGNOME Keyringを使います。ありがたいです。Keyring不要な場合はもちろんssh-agentを動作させればOKです。

Ubuntu: サーバ側

公開鍵をサーバまで持っていきログインするユーザの ~/.ssh/authorized_keys に追加、無ければ作成して追加します。

% mkdir -p ~/.ssh
% chmod go= ~/.ssh
% echo >>~/.ssh/authorized_keys
% cat id_ed25519_sk.pub >>~/.ssh/authorized_keys

設定はこれだけでサーバもそのまま利用できます。パスワードでのログインを無効、スーパーユーザーのログインを無効、など適切に設定してください。HostKeyを明示している場合はEd25519用の鍵を明示します。

Ubuntu: 接続

接続です。

$ ssh -i ~/.ssh/id_ed25519_sk -F /dev/null ::1
Enter passphrase for key '/home/est/.ssh/id_ed25519_sk': 
Confirm user presence for key ED25519-SK SHA256:x8znliA8e88Cr3lTMGP9oaAEzvxlfFa/NYhGbJu6xyk
Last login: Fri Oct 22 17:57:42 2021 from ::1
$ exit
ログアウト
Connection to ::1 closed.

$ ssh -i ~/.ssh/id_ed25519_sk -F /dev/null ::1
Enter passphrase for key '/home/est/.ssh/id_ed25519_sk': 
Confirm user presence for key ED25519-SK SHA256:x8znliA8e88Cr3lTMGP9oaAEzvxlfFa/NYhGbJu6xyk
Last login: Mon Oct 25 13:04:52 2021 from ::1
$ exit
ログアウト
Connection to ::1 closed.

まず鍵ハンドルファイルのパスワードを訊かれ、入力するとYubiKeyがピカピカし始めるので、タッチすればログインできます。念のため繰り返して、再度パスワードを訊かれることを確認しました。続いてssh-agentを試します。

$ ssh-add ~/.ssh/id_ed25519_sk
Enter passphrase for /home/est/.ssh/id_ed25519_sk: 
Identity added: /home/est/.ssh/id_ed25519_sk (est@mors)

$ ssh -F /dev/null ::1
Last login: Mon Oct 25 13:05:03 2021 from ::1
$ exit
ログアウト
Connection to ::1 closed.

ssh-add した際に訊かれたパスワードを最後に、あとはしれっとYubiKeyが点滅するのでタッチするだけです。

あっけなく完了したのでFIDO2のdiscoverable credentialsを試します。

-O residentによるdiscoverable credentials

まずは先程追加した鍵がKeyringに残っているので、「パスワードと鍵(Seahorse)」のOpenSSH鍵より削除します。

Seahorse
$ ssh-keygen -t ed25519-sk -O resident
Generating public/private ed25519-sk key pair.
You may need to touch your authenticator to authorize key generation.
Enter PIN for authenticator: 
Enter file in which to save the key (/home/est/.ssh/id_ed25519_sk): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/est/.ssh/id_ed25519_sk
Your public key has been saved in /home/est/.ssh/id_ed25519_sk.pub
The key fingerprint is:
SHA256:QLk+wF9oeOZBBlIXzdlI1SzWvnG02JnTJNZsncaPcW8 est@mors
The key's randomart image is:
+[ED25519-SK 256]-+
|  ..o.+*.=.+  .oo|
|   . o+ = + + =+B|
|   . +.o . o =.%o|
|    + B..   + O E|
|     O oS    + o |
|      =     .    |
|       .         |
|                 |
|                 |
+----[SHA256]-----+

FIDO2 PINを訊かれるので入力します。YubiKeyがピカピカし始めるのでタッチします。鍵ハンドルファイルのパスワードを訊かれるので入力しますが使うことはありません。出来上がったファイルは公開鍵(.pub)も含めて使わないでやってみます。YubiKeyをサーバに刺してサーバ側に公開鍵を追加する操作をします。macOS付属のssh-addでは-KオプションがKaychainに保存するために使われているので、将来のmacOSではKeychain用のオプションは-Kではなくなる可能性があります。

2021-11-21追記: Montereyより –apple-use-keychain に変わりました。以下のようなメッセージが表示されます。

$ ssh-add -K
WARNING: The -K and -A flags are deprecated and have been replaced
         by the --apple-use-keychain and --apple-load-keychain
         flags, respectively.  To suppress this warning, set the
         environment variable APPLE_SSH_ADD_BEHAVIOR as described in
         the ssh-add(1) manual page.
$ ssh-add -l
The agent has no identities.

$ ssh-add -K
Enter PIN for authenticator: 
Resident identity added: ED25519-SK SHA256:GBtAySoSJylx/1uioAqPj7WuDWVRndmBfOKqHvsIWIE

$ ssh-add -l
256 SHA256:GBtAySoSJylx/1uioAqPj7WuDWVRndmBfOKqHvsIWIE  (ED25519-SK)

$ ssh-add -L >> ~/.ssh/authorized_keys

訊かれたのはFIDO2 PINのみです。再度クライアント側にYubiKeyを刺し、同様の操作をします。

$ ssh-add -l
The agent has no identities.

$ ssh-add -K
Enter PIN for authenticator: 
Resident identity added: ED25519-SK SHA256:GBtAySoSJylx/1uioAqPj7WuDWVRndmBfOKqHvsIWIE

$ ssh-add -l
256 SHA256:GBtAySoSJylx/1uioAqPj7WuDWVRndmBfOKqHvsIWIE  (ED25519-SK)

$ ssh -F /dev/null ::1
Last login: Mon Oct 25 13:29:20 2021 from ::1
$ exit
ログアウト
Connection to ::1 closed.

FIDO2 PINとタッチだけでログインできました。

以上macOSに続いてUbuntuでした。次はFreeBSD、その次はCygwinです。ごきげんよう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です