ACRi ルームのセキュリティ強化のため、ACRi ルームへ SSH 接続する際の標準の認証方式を、2024年12月より公開鍵認証に変更し、2025年2月17日のメンテナンス以降は公開鍵認証を必須とすることにしました。この変更は、ユーザが最初にログインするサーバ (gw.acri.c.titech.ac.jp) にのみ適用されます。開発用の各種サーバ (as???, vs???) へのログインには、これまで通りパスワード方式の認証を使用します。
このページでは、公開鍵認証のための鍵ペアの作成方法や、検証鍵のサーバへの登録方法について説明します。
TL; DR
すでに GitHub などのサービスで公開鍵認証になじみのある方は、以下の手順でサーバに鍵を登録してください。
- ssh-keygen で生成した検証鍵ファイル (拡張子 .pub) の全文をコピー
- 予約システムにログインして、プロフィール編集ページへ
- ページ下部の「検証鍵」の欄に、1でコピーした内容をペーストし、プロフィールを更新
- 2~3分後にプロフィール編集ページを再度開き、「検証鍵の登録状況」を確認
下の画像に示すように、「鍵は (日時) に ACRi ルームのサーバに登録されました。」と表示されていれば、鍵の登録は完了しています。
なぜ公開鍵認証に切り替えるのか
今回の変更は、直接的には、ACRi のサーバが収容されている東京科学大学の情報セキュリティポリシーに対応するために行うものです。ただ間接的には、パスワードに対する攻撃が年々深刻になってきていることが背景にあります。単純なパスワードや、他のサービスで流出したパスワードによる不正アクセスの事例は、今やいくらでも挙げることができます。根本的な対策は、パスワードのような情報を知っていること (知識要素) による認証だけに頼らないことです。本人だけが持つ鍵を持っていること (所有要素) や本人だけが備える生物学的特徴を持っていること (固有要素; 要するに生体認証) を使う、あるいは併用することが重要です。
公開鍵認証は、所有要素による認証を実現する1つの方法です。具体的には、公開鍵認証により、署名鍵の入ったデバイスをユーザが持っていることを確認できます。署名鍵を持っていなければ、認証を通過できる可能性は実質ゼロですので、「たまたま」当たってしまうかもしれないパスワードよりも強いセキュリティを確保できます。
公開鍵認証のしくみの概略を表したのが上の図です。ユーザは、あらかじめ署名鍵 KS と検証鍵 KV のペアを作成します。このうち署名鍵は外部に漏れないようにし、検証鍵だけをサーバに送ります。認証の際は、ユーザとサーバとの間で署名対象のメッセージ M を共有し、サーバはユーザにメッセージへの署名を要求します。ユーザは手続き S(M, KS) を使って署名 s を作成し、サーバに送ります。サーバはメッセージと署名、あらかじめ受け取っていた検証鍵 KV を使い、手続き V(M, s, KV) で署名が真正かどうかを検証します。
ポイントは、署名の手続きは署名鍵 KS を持っているユーザにしかできないというところです。一方で、検証の手続きは検証鍵 KV さえ持っていれば誰でも可能です。この検証に通れば、ユーザが確かに署名鍵を持っていることが確認できます。また、ユーザが署名する際にパスフレーズを求めたり、生体認証を要求したりすれば、知識要素や固有要素を自然に組み込む (多要素認証にする) ことも可能です。
※ 公開鍵認証については、しばしば「秘密鍵で暗号化」「公開鍵で復号」という誤った説明がなされることがあります。検証の手続きで求められるのは署名が真正かどうかだけであることに、注意が必要です。
ということで、公開鍵認証の導入にあたっては、署名鍵と検証鍵のペアを作成し、検証鍵を ACRi ルームのサーバに登録する作業を、ユーザごとに行っていただくことになります。
Windows 向け: ツールの準備
公開鍵認証による SSH 接続を便利にするツールに ssh-agent があります。面倒なコマンド入力や、パスフレーズの毎回の入力が不要になります。mac の場合は必要なときに自動起動され (るらしい)、Linux の場合はシェルの設定ファイル (.bashrc など) に適当な記述を加えることで自動起動が可能です。Windows の場合には、ssh-agent はサービスとして登録されていますが、自動起動される設定にはなっていません。そのため、まずは ssh-agent を自動起動するように設定します。
スタートメニューから、「Windows 管理ツール → サービス」を選択して、サービス管理画面 (services.msc) を開きます。インストールされているサービスの一覧が表示されますので、その中から OpenSSH Authentication Agent を右クリックし、プロパティを選択します。
プロパティ画面では、スタートアップの種類を「自動」に設定して、ssh-agent の自動起動を有効にします。また、サービスの状態を確認し、「実行中」でなければ「開始」ボタンを押して、ssh-agent を起動しておきます。
また、WinSCP を使ってファイル転送を行いたい場合には、WinSCP から ssh-agent を参照するために、WinSSH-Pageant というツールをインストールします。上記サイトから MSI 形式のインストーラをダウンロードしても良いですが、Windows のパッケージ管理ツールである winget を使うのが簡単です。スタートメニューから「Windows PowerShell → Windows PowerShell」を選択して PowerShell を起動したら、以下の通り入力します。
winget install winssh-pageant
最終的に、インストールが完了しましたと表示されれば、以降は Windows の起動時にこのツールも自動起動します (スタートアップに登録されます)。
署名鍵・検証鍵の作成
ここからは OS にかかわらず共通の操作になります。PowerShell やターミナルアプリから、以下のコマンドを入力して、鍵のペアを生成します。
ssh-keygen -t ed25519
その後まず、鍵ファイルの保存先 (Enter file in which to …) を尋ねてきますので、何も入れずに Enter を押します (保存先を変更する場合は、ここで適当な場所を指定)。次にこの鍵を使用する際に入力するパスフレーズ (Enter passphrase …) を尋ねてきますので、同じパスフレーズを2回入力します。何も入れずに Enter を押せばパスフレーズなしにもできますが、署名鍵が漏れたときのためにパスフレーズを設定しておくことをおすすめします。
鍵のペアの生成に成功したときの画面の一例を、上図に示します。緑色の箇所は Windows のユーザ名、黄色の箇所にはマシン名が入ります。薄紫の箇所は鍵によって変わる値です。
このとき作成される鍵ファイルは、デフォルト設定ではユーザのホームディレクトリ (Windows ではプロファイル: 例えば C:\Users\ユーザ名) 直下、.ssh というフォルダの中に作成されます。拡張子なしのファイル (id_ed25519) は署名鍵ですので、外部に漏らさないよう注意してください。拡張子 .pub のファイル (id_ed25519.pub) が検証鍵です。これをこのあと ACRi ルームの予約システムに登録します。
PowerShell を使っている場合、以下のコマンドで検証鍵をクリップボードにコピーできます。
Get-Content $ENV:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard
それ以外の場合は、検証鍵のファイルをテキストエディタで開き、全文をコピーしてください。
最後に、以下のコマンドで ssh-agent に署名鍵を登録します。
ssh_add
パスフレーズを設定している場合には、ここでパスフレーズを要求されます。mac 環境の場合には、コマンドに –apple-use-keychain オプションをつけると、OS 標準のキーチェイン管理機能を使ってくれるようです。
検証鍵の登録
検証鍵の登録は、予約システムのプロフィール編集ページから行います。予約システムのパスフレーズを入力してログインしたあとで、プロフィール編集ページを開いてください。
プロフィール編集ページの1番下に、「検証鍵」という項目がありますので、先ほどコピーした検証鍵の全文をペーストします。もし ACRi ルームにログインしたいデバイスが複数ある場合には、それぞれのデバイスで鍵のペアを作成して、検証鍵を改行区切りで登録してください。
その後、ページ最下部の「プロフィールを更新」ボタンを押すと、検証鍵が登録されます。登録された鍵の情報が ACRi ルームのサーバにコピーされるまでには、最大で2分程度かかります。
2~3分後に再度プロフィール編集ページにアクセスすると、「検証鍵の登録状況」の欄が追加されており、「鍵は (日時) に ACRi ルームのサーバに登録されました。」と表示されるはずです。
もししばらく待っても登録されない場合は、検証鍵が正しくコピーペーストできているかどうかを確認してください。通常、検証鍵の冒頭は「ssh-ed25519 AAAAC3NzaC1lZDI1NTE5A…」という文字列になっているはずです。それでもうまくいかない場合は、acri-room at acri dot c.titech.ac.jp までお問い合わせください (at, dot は適切に書き換える) 。
ssh コマンドで ACRi ルームのサーバにログインしてみましょう。パスフレーズを要求されずにログインできれば成功です!
ssh <ユーザ名>@gw.acri.c.titech.ac.jp