OpenSSH形式の秘密鍵のパスフレーズはssh-keygen -pで外す

  • SSH
  • OpenSSH

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

結論

秘密鍵のパスフレーズを外すにはssh-keygen -pを使う。

$ cp ~/.ssh/id_rsa ~/.ssh/id_rsa.inpass
$ ssh-keygen -p -f ~/.ssh/id_rsa

対話式で以下を聞かれる。

  • Enter old passphrase: → 現在のパスフレーズ
  • Enter new passphrase (empty for no passphrase): → 何も入力せずEnter
  • Enter same passphrase again: → 何も入力せずEnter

同じファイル名・同じ形式のまま、パスフレーズだけが外れる。

なぜssh-keygenなのか

秘密鍵にはtraditional PEM形式(-----BEGIN RSA PRIVATE KEY-----)とOpenSSH形式(-----BEGIN OPENSSH PRIVATE KEY-----)がある。OpenSSH 7.8(2018年公開)以降、ssh-keygenのデフォルト出力形式はPEM形式からOpenSSH形式に変わった。つまり今の環境で新規生成した鍵はほぼ全てOpenSSH形式になっている。

ssh-keygen -pはどちらの形式に対しても動作するので、形式を気にせず使える。

鍵の形式が分からない場合は先頭行で判別できる。

$ head -1 ~/.ssh/id_rsa

-----BEGIN OPENSSH PRIVATE KEY-----ならOpenSSH形式、-----BEGIN RSA PRIVATE KEY-----ならtraditional PEM形式。

PEM形式が出てくるのは、古い時期に生成した鍵をそのまま使い続けている場合や、ssh-keygen -m PEMで明示的に指定して生成した場合など。

補足

  • 作業後はid_rsaのパーミッションが600になっているか確認する。
  • パスフレーズを外すと、鍵ファイルが漏れた場合にそのまま使われるリスクが上がる点は運用上認識しておく必要がある。
  • 作業確認後、平文パスフレーズ付きのid_rsa.inpassは削除するか、少なくとも他の場所に残さないようにする。