JumpCloudの鍵認証で使用されるauthorized_keys.jcorigを理解する

業務上AWSのEC2のユーザ管理をJumpCloudで統一して管理している.JumpCloud上で管理対象のEC2に鍵認証を許可することができるのだが,公開鍵を設定する方法として「JumpCloudのコンソール上で設定する方法」と「実際にサーバに手動で設定する方法」がある.後者で設定しようとした際に~/.ssh/authorized_keysの他に~/.ssh/authorized_keys.jcorigというファイルがあることに気づいた(以降authorized_keysauthorized_keys.jcorigと表記する).今回はこれがなんのためにあるものなのか調べてみた.

authorized_keys.jcorigとは

公式には詳細については書いていなかった. support.jumpcloud.com

実際にauthorized_keys.jcorigの中身を確認したところ

# Keys added to this file will be automatically
# copied to your authorized_keys file by the JumpCloud agent.

と書いてあり,authorized_keys.jcorigに書くとJumpCloudエージェントがauthorized_keysにコピーしてくれるようだ.

さらにauthorized_keysを確認すると

# Keys added to this file will be automatically
# copied to your authorized_keys file by the JumpCloud agent.

# Constructed by the JumpCloud agent, you can add keys manually in /home/hoge/.ssh/authorized_keys.jcorig

と書いてあり,サーバ上で手動で設定するならauthorized_keys.jcorigに書き込めという旨が書いてある.

検証

公式にそこまで情報はないがauthorized_keys.jcorigに書き込めばauthorized_keysにJumpCloudエージェントが内容を反映してくれるのだろうという予想はできたので,実際に色々と試して検証してみることにする.JumpCloudエージェントがインストールされたEC2を用意し以下を確認していく.

  • サーバ上に手動で設定するパターン
    • authorized_keys.jcorigに公開鍵を追加
    • authorized_keysに公開鍵を追加
  • JumpCloud上で設定するパターン
    • 公開鍵を追加
    • 公開鍵を削除

サーバ上でauthorized_keys.jcorigに手動で公開鍵を追加

まずは正当な方法であろうauthorized_keys.jcorigに手動で公開鍵を追加する.しかし,しばらくしてもauthorized_keys.jcorigの内容がauthorized_keysにコピーされずログインはできなかった.そこで以下3パターンでログインの可否を確認する.

  • EC2を再起動するとauthorized_keys.jcorigの内容がauthorized_keysにコピーされログインできた
  • authorized_keysにも公開鍵を記述するとログインできた(その後EC2を再起動しても特に問題なし)
  • JumpCloudエージェントを再起動する方法ではauthorized_keysに内容がコピーされることはなくログインできなかった

サーバ上でauthorized_keysに手動で追加

次にauthorized_keysに公開鍵を追加してみた.するとログインできるようになったが,EC2を再起動をするとauthorized_keysから公開鍵が消えてしまいログインできなくなった.

ここまでの検証で以下のことがわかる.

  • 基本的にはauthorized_keysに公開鍵が登録されているかどうかで認証の機能が動作する一般的なLinuxの仕組みと同じ動きをする
  • authorized_keys.jcorigに公開鍵を記述してもauthorized_keysに記述されないと鍵認証されないので,即時でログインしたい場合はEC2を再起動するauthorized_keysにも同じ内容を書くことが必須
  • 手動で公開鍵を追加するにはauthorized_keys.jcorigに書かないと永続化されない
  • 公開鍵を削除する際は少なくともauthorized_keys.jcorigの公開鍵を削除しないと,EC2を再起動した際に再びauthorized_keysに書き込まれてしまう
  • 公開鍵を削除する際,即時にログインできないようにするにはauthorized_keys.jcorigの公開鍵を削除してEC2を再起動するかauthorized_keys.jcorigauthorized_keys両ファイルから公開鍵を削除する必要がある
  • authorized_keys.jcorigの内容をauthorized_keysにコピーする方法として,JumpCloudエージェントの再起動は使えない
  • 公開鍵の追加・削除共にauthorized_keys.jcorigが正として振る舞っている

JumpCloudコンソールから公開鍵を追加

JumpCloudコンソールを使って公開鍵を追加すると,EC2を再起動しなくともしばらくするとauthorized_keysに公開鍵が追加される.一方authorized_keys.jcorigには何も追加されない.また公開鍵を手動で追加した場合とJumpCloudコンソールから追加した場合とでauthorized_keysに記述される公開鍵の位置が以下のように異なる.

$ cat authorized_keys
# Keys added to this file will be automatically
# copied to your authorized_keys file by the JumpCloud agent.
[authorized_keys.jcorigからコピーされた手動で設定した公開鍵]

# Constructed by the JumpCloud agent, you can add keys manually in /home/yuichiro.takarada/.ssh/authorized_keys.jcorig
[JumpCloudコンソールで設定した公開鍵]

JumpCloudコンソールから公開鍵を削除

JumpCloudコンソールを使って公開鍵を削除すると,EC2を再起動しなくともしばらくするとauthorized_keysから公開鍵が削除される.ちなみに,JumpCloudコンソールから設定されたauthorized_keysに記述してある公開鍵を手動で削除するともちろんログインはできなくなるがJumpCloudのコンソールからは削除されない.そこからEC2を再起動するとauthorized_keysにJumpCloudコンソールで設定した公開鍵が再び設定される.

ここまでの検証で以下のことが分かる.

  • JumpCloudコンソールを使って追加された公開鍵はauthorized_keys.jcorigに書き込まれず,authorized_keysにのみ書き込まれる
  • JumpCloudコンソールを使って追加・削除された公開鍵は,EC2を再起動せずとも自動でauthorized_keysに追加・削除が行われる
  • JumpCloudコンソールを使って追加された公開鍵がauthorized_keysからサーバ上で手動により削除された場合でも,JumpCloudコンソールから削除されていなければ,EC2の再起動後再びauthorized_keysに書き込まれる
  • JumpCloudコンソールの状態を正として振舞う

検証結果からの学び

検証結果から,JumpCloudエージェントが入ったインスタンスでは「サーバ上で手動による公開鍵を設定する」・「JumpCloudで公開鍵を設定する」という2つの公開鍵設定方法がある中で,前者の方法ではauthorized_keys.jcorigを正としてauthorized_keysに公開鍵をコピーし,後者の方法ではJumpCloudコンソールを正としてauthorized_keysに公開鍵をコピーしていることが分かった.運用においては基本JumpCloudコンソール上から設定する方法でなんら問題ないと思うのでそうするつもりだが,どうしても手動で設定する必要がある場合だけ今回の調査を生かしてauthorized_keys.jcorigに公開鍵を記述する運用にしたい.とにかく,authorized_keys.jcorigが「サーバ上で手動による公開鍵を設定する」ためのファイルだということは理解した.

まとめ

  • JumpCloudエージェントが入ったインスタンスauthorized_keys.jcorigというファイルがなんのためにあるのかということを調べた
  • authorized_keys.jcorigは「サーバ上で公開鍵を設定する」場合の公開鍵を管理するファイルであることが分かった