PPK 形式(Putty)のキーペアを PEM 形式(OpenSSH)に変換してみた

2020.02.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、コンサルティング部の望月です。

EC2 キーペアで PPK 形式(Putty)が選択できるようになりました。これで、PuTTY 派の人も手元で PEM 形式(OpenSSH)のキーペアを変換する必要がなくなりました。

PuTTY派 歓喜! ppk形式のEC2キーペアが作成できるようになりました

そのため、場合によっては、作業のためキーペアをもらったら PPK 形式だったなんてことが、今後発生する可能性があります。

そんな場面に出くわした macOS ユーザーが困らないようにこちらのエントリーをお届けします。

やってみた

前提

PPK 形式のキーペアを PEM 形式に変換

Homebrew に putty というパッケージがあるため、こちらをインストールします。

$ brew info putty
putty: stable 0.73 (bottled), HEAD
Implementation of Telnet and SSH
https://www.chiark.greenend.org.uk/~sgtatham/putty/
……

$ brew install putty

変換を行なうためには、先程インストールした putty パッケージに入っている puttygen コマンドを利用します。
以下、ヘルプになりますが PEM 形式に変換するには -O private-openssh オプションを指定します。

$ puttygen --help
PuTTYgen: key generator and converter for the PuTTY tools
Release 0.73
Usage: puttygen ( keyfile | -t type [ -b bits ] )
                [ -C comment ] [ -P ] [ -q ]
                [ -o output-keyfile ] [ -O type | -l | -L | -p ]
  -t    specify key type when generating (ed25519, ecdsa, rsa, dsa, rsa1)
  -b    specify number of bits when generating key
  -C    change or specify key comment
  -P    change key passphrase
  -q    quiet: do not display progress bar
  -O    specify output type:
           private             output PuTTY private key format
           private-openssh     export OpenSSH private key
           private-openssh-new export OpenSSH private key (force new format)
           private-sshcom      export ssh.com private key
           public              RFC 4716 / ssh.com public key
           public-openssh      OpenSSH public key
           fingerprint         output the key fingerprint
  -o    specify output file
  -l    equivalent to `-O fingerprint'
  -L    equivalent to `-O public-openssh'
  -p    equivalent to `-O public'
  --old-passphrase file
        specify file containing old key passphrase
  --new-passphrase file
        specify file containing new key passphrase
  --random-device device
        specify device to read entropy from (e.g. /dev/urandom)

puttygen コマンドを実施することで、PEM 形式へ変換されました。
あとは、変換した pem で SSH を行うことで、ログインすることができます。

$ cat <キーペア>.ppk
PuTTY-User-Key-File-2: ssh-rsa
……

$ puttygen <キーペア>.ppk -O private-openssh -o <キーペア>.pem

$ cat <キーペア>.pem
-----BEGIN RSA PRIVATE KEY-----
……
-----END RSA PRIVATE KEY-----

PPK 形式のキーペアで SSH する

ちなみに putty パッケージには plink コマンドもあり、こちらのコマンドを利用すれば、PPK 形式のキーペアを使って SSH ログインを行うことができます。

$ plink -i <キーペア>.ppk -ssh ec2-user@<IP address> -ssh
Using username "ec2-user".
Access granted. Press Return to begin session.
Last login: Thu Feb  6 09:56:11 2020 from xxx.xxx.xxx.xxx

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
3 package(s) needed for security, out of 24 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-xx-xx-xx-xx ~]$

まとめ

これで突然 PPK 形式のキーペアがやってきても、怖くないですね!!
また、AWS Systems Manager のセッションマネージャーを利用すれば、こういったキーペアの管理といったことも不要になります。
最近は私もセッションマネージャーで作業をすることが多いですし、皆様もセッションマネージャー使っていきましょう!!!