上の記事を読みました。
大雑把にまとめると、こんな感じの内容です。
- ssh コマンドを実行した際の認証時に、ssh-agent で保持している公開鍵と、~/.ssh/id_* に置いてある公開鍵の情報がすべてサーバーに送信される(認証できる公開鍵が検出されるまで)。
- GitHub はユーザーが認証用に登録された公開鍵の情報を公開しており(これは知っていました)、この方はそのデータを収集している。
- この方の管理するサーバー(whoami.filippo.io)にSSH接続すると、そのときに送信された公開鍵の情報を先程のデータに突き合わせることによって、どの GitHubアカウントが接続してきたのか分かる。実際このサーバーには、この動作を試すためのプログラムが設置されているので、
ssh whoami.filippo.io
というコマンドでテストできる。
紹介されているコマンドに -vvv
オプションを指定(処理の詳細が出力されます)して試したところ、以下のことが分かりました。(ssh のバージョンは、OpenSSH_8.9p1 Ubuntu-3, OpenSSL 3.0.2 15 Mar 2022 です)
- ssh コマンドをオプションなしで実行すると、ssh-agent で読み込んでいる鍵と、以下の鍵ファイルが候補として読み込まれて使われる。
- ~/.ssh/id_rsa
- ~/.ssh/id_ecdsa
- ~/.ssh/id_ecdsa_sk
- ~/.ssh/id_ed25519
- ~/.ssh/id_ed25519_sk
- ~/.ssh/id_xmss
- ~/.ssh/id_dsa
- ssh コマンドにオプション「-o “IdentitiesOnly=yes” -i ~/path/to/key-file」を指定して実行すると、このオプションで指定した鍵ファイル以外は使われない(ssh-agent で読み込んだ鍵も使われない)。
- 自分で生成した ~/.ssh/id_rsa_foo のようなファイルが、勝手に読み込まれて使われることはなさそうだ(冒頭の記事にある「~/.ssh/id_* に該当する鍵ファイル」がすべて使われるわけではない)。
鍵ファイルはサービス、アカウント、デバイス等に応じてそれぞれ別に生成して使うと安全です。また、~/.ssh/config ファイルには、ssh接続先毎に、「IdentitiesOnly yes」や「IdentityFile」を指定するべきでしょう(「-o “IdentitiesOnly=yes” -i ~/path/to/key-file」を ssh コマンドのエイリアスに指定する方法もあります)。
参考