YubiKeyとSSH – FreeBSD

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

% uname -a
FreeBSD principium 12.2-RELEASE-p7 FreeBSD 12.2-RELEASE-p7 GENERIC  amd64

% ssh -V
OpenSSH_7.9p1, OpenSSL 1.1.1h-freebsd  24 Aug 2021

Contents

FreeBSD: 準備

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

2022-09-27追記: FreeBSD 13.1でbaseが-sk対応になったので、以下のportsの作業は不要です。

% uname -a
FreeBSD principium 13.1-RELEASE-p2 FreeBSD 13.1-RELEASE-p2 GENERIC amd64

% /usr/bin/ssh -V
OpenSSH_8.8p1, OpenSSL 1.1.1o-freebsd  3 May 2022

FreeBSD 13でもbaseのOpenSSHのバージョンが-sk非対応のバージョンなので、さくっとportsの security/openssh-portable を使います。FIDO_U2Fオプションがあり、チェックを付けた場合はlibfido2もインストールされました。

普段使い用にはaliasするくらいがちょうどよいでしょうか。

% ssh -V
OpenSSH_8.6p1, OpenSSL 1.1.1h-freebsd  24 Aug 2021

% \ssh -V
OpenSSH_7.9p1, OpenSSL 1.1.1h-freebsd  24 Aug 2021

% fido2-token -L

YubiKeyを見つけてもらえません。

FreeBSD: クライアント側準備

ktraceであたりをつけると /dev/uhid の権限のようなのでスーパーユーザ権限では表示されることを確認したのち /etc/devfs.rules を作成します。

[system=10]
add path 'uhid*' mode 0660 group operator

devfsを再実行し、 operatorグループにYubiKeyを使うユーザを追加します。

# service devfs restart

# ls -la /dev/uhid*
crw-rw----  1 root  operator  0x7a Sep 29 17:31 /dev/uhid0

# pw groupmod operator -m est

# exit

ログインしなおして再確認します。

% fido2-token -L
/dev/uhid0: vendor=0x0b5d, product=0x0000 (FreeBSD uhid(4))

良さそうです。

FreeBSD: クライアント側

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

% 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:
You may need to touch your authenticator (again) to authorize key generation.
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:tdKJaDHuUWSdPrnYn2gV93w91aQ0nQB3odzdNuFV4JE est@tranquility
The key's randomart image is:
+[ED25519-SK 256]-+
|        o. o.o+B*|
|       o  o o.EoB|
|      o .... +.B=|
|     . = ++o. o.+|
|      = So+o o oo|
|     o ...o .  .=|
|      .    + .  o|
|          o o    |
|         .       |
+----[SHA256]-----+

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

デスクトップ環境で使うことがなくなってしまったので、素のssh-agentの使い方です。GNOMEであればUbuntuと同様、そのほかのwindow managerであれば /etc/Xsession.d/ からssh-agentやその代替が起動しているかと思うので、適宜調整してください。

% ps auxwwww | fgrep ssh
est      13922  0.0  0.2 17600 8456  -  S    10:08   0:00.59 sshd: est@pts/0 (sshd)
est      76192  0.0  0.2 17600 8324  -  S    14:38   0:00.05 sshd: est@pts/1 (sshd)
est      93790  0.0  0.1 11192 2720  0  S+   15:37   0:00.00 fgrep ssh

% ps auxwwww | fgrep key
est      93801  0.0  0.1 11192 2720  0  S+   15:37   0:00.00 fgrep key

% echo $SHELL
/bin/tcsh

% eval ssh-agent
Agent pid 93982

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

FreeBSD: サーバ側

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

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

設定はこれだけ。同じ機械でSSHサーバも動作させる場合はパスワードでのログインを無効、スーパーユーザーのログインを無効、など適切に設定してください。HostKeyを明示している場合はEd25519用の鍵を明示します。portsのsshdを使う場合は混乱しないようにbaseのsshdを止めた方がよいかもしれません。お好みのrc.confの修正方法で sshd_enable=”NO” と openssh_enable=”YES” で自動起動を設定します。 

FreeBSD: 接続

接続です。

% 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:tdKJaDHuUWSdPrnYn2gV93w91aQ0nQB3odzdNuFV4JE
User presence confirmed
Last login: Mon Oct 25 14:38:34 2021 from 192.168.108.76
% exit
logout
Connection to ::1 closed.

% ssh -i ~/.ssh/id_ed25519_sk -F /dev/null -p 8022 ::1
Enter passphrase for key '/home/est/.ssh/id_ed25519_sk':
Confirm user presence for key ED25519-SK SHA256:tdKJaDHuUWSdPrnYn2gV93w91aQ0nQB3odzdNuFV4JE
User presence confirmed
Last login: Mon Oct 25 15:46:26 2021 from ::1
est@tranquility:~ % exit
logout
Connection to ::1 closed.

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

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

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

% ssh -i ~/.ssh/id_ed25519_sk -F /dev/null ::1
Last login: Mon Oct 25 15:46:41 2021 from ::1
% exit
logout
Connection to ::1 closed.

% ssh -i ~/.ssh/id_ed25519_sk -F /dev/null ::1
Last login: Mon Oct 25 15:55:53 2021 from ::1
est@tranquility:~ % exit
logout
Connection to ::1 closed.

ssh-add した際に訊かれたパスワードを最後に、あとはしれっとYubiKeyが点滅するのでタッチするだけです。試すまでもなくFIDO2のdiscoverable credentialsもUbuntu同様当たり前のように使えるかと思います。

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

コメントを残す

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