SSHの秘密鍵には、OpenSSHが使う.pem形式と、PuTTYが使う.ppk形式があります。
結論から書くと、Macではbrew install puttyでPuTTYgenを入れ、puttygen key.pem -o key.ppkで.pemから.ppkへ、puttygen key.ppk -O private-openssh -o key.pemで.ppkから.pemへ変換できます。
注意点が1つあります。PuTTY 0.75以降のPuTTYgenは既定でPPKバージョン3の鍵を出力するため、古いツールに読ませると「PuTTY key format too new」というエラーになります。この記事ではその回避方法まで書きます。
スポンサーリンク
.pemと.ppkはどちらを使う形式か
結論:Mac・LinuxのsshコマンドはOpenSSH形式(.pem)をそのまま読めます。.ppkが必要になるのは、WindowsのPuTTYやWinSCPを使うときだけです。
| 形式 | 主な用途 | Macでの扱い |
|---|---|---|
.pem(OpenSSH形式) |
ssh コマンド、AWS EC2 のキーペア、多くのCIツール | そのまま使える |
.ppk(PuTTY形式) |
PuTTY、WinSCP、FileZillaの一部設定 | 変換が必要 |
案件の引き継ぎで.ppkだけ渡された、あるいはWindows環境の相手に.ppkを渡す必要がある、という場面で変換が要ります。
MacにPuTTYgenをインストールする
結論:Macではbrew install puttyでインストールします。PuTTY公式サイトで配布されているPuTTYgenはWindows用のGUIアプリなので、Macでは使えません。
brew install putty
puttygen --version
brewコマンドが使えない場合は、先にHomebrewを導入してください。手順はMacにHomebrewとVimをインストールする手順とパス設定にまとめています。
puttyパッケージには、変換に使うputtygenのほか、plinkやpscpといったコマンドも含まれています。なおpscpはpsshパッケージと衝突するので、両方を入れている場合はbrew linkで切り替える必要があります。
2026年9月時点で、Homebrewから入るPuTTYの安定版は0.85です。バージョンはbrew info puttyで確認できます。
スポンサーリンク
.pemから.ppkへ変換する
結論:puttygen 変換元.pem -o 変換先.ppkを実行します。出力形式の既定がPPKなので、形式の指定は要りません。
puttygen key.pem -o key.ppk
key.pemの部分は変換したい鍵のファイル名に置き換えてください。元の.pemファイルは変更されず、新しくkey.ppkが作られます。
元の鍵にパスフレーズが設定されている場合は、実行時に入力を求められます。
「PuTTY key format too new」と言われたらバージョン2で出力する
結論:PuTTY 0.75(2021年リリース)以降のPuTTYgenは、既定でPPKバージョン3の鍵を出力します。古いPuTTYやWinSCP、一部のCIツールはこれを読めません。
エラーメッセージは「Unable to load key file “key.ppk” (PuTTY key format too new)」のような形で出ます。この場合は、PPKバージョン2を指定して出力し直してください。
puttygen key.pem -O private --ppk-param version=2 -o key.ppk
PPKバージョン3は、パスフレーズの総当たり攻撃を難しくするためにArgon2という鍵導出関数を使い、MACのハッシュもSHA-1からSHA-256に変わっています。渡す相手のツールが対応しているなら、バージョン3のままにしておくほうが安全です。読めなかったときだけバージョン2に落としてください。
.ppkから.pemへ変換する
結論:puttygen 変換元.ppk -O private-openssh -o 変換先.pemを実行します。-O private-opensshでOpenSSH形式を指定するのが要点です。
puttygen key.ppk -O private-openssh -o key.pem
-Oを省略するとPPK形式のまま出力されてしまい、拡張子だけ.pemのファイルができあがります。sshコマンドで読めないときは、ここを疑ってください。
OpenSSHの新しい鍵形式で出力したい場合はprivate-openssh-newを指定します。
puttygen key.ppk -O private-openssh-new -o key.pem
スポンサーリンク
変換した鍵はパーミッションを400にする
結論:変換直後の鍵ファイルは他のユーザーからも読める状態のことがあり、そのままではsshが接続を拒否します。chmod 400で自分だけが読める状態にしてください。
chmod 400 key.pem
ssh -i key.pem ユーザー名@サーバーのアドレス
パーミッションが緩いままだと、次のような警告が出て接続が中断されます。
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions 0644 for 'key.pem' are too open.
サーバーへの接続とgitでのデプロイまで通す流れは、Dockerで開発したLaravelのWebサイトをgitでXserverにデプロイするに書いています。
変換した鍵をそのまま共有しない
結論:秘密鍵は変換しても秘密鍵のままです。チャットやメールに添付して渡さないでください。
.pemと.ppkは入れ物が違うだけで、中身は同じ秘密鍵です。形式を変えたからといって安全性が変わることはありません。
相手に渡す必要があるのは通常公開鍵のほうです。公開鍵だけを取り出したい場合は、次のコマンドで出力できます。
puttygen key.ppk -O public-openssh -o key.pub