ジャンルから探す

Web Design & Dev English

Macでpemとppkを相互変換する|puttygenの使い方

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のほか、plinkpscpといったコマンドも含まれています。なおpscppsshパッケージと衝突するので、両方を入れている場合は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