OpenSSH 7.8 以降の ssh-keygen
OpenSSH 7.8 以降の ssh-keygen で作成した秘密鍵のデフォルトのフォーマットは OpenSSH フォーマットに変更された(OpenSSH 7.8 より古いバージョンでは OpenSSL's PEM フォーマット)。
https://www.openssh.com/txt/release-7.8-
macOS 10.14.3 のターミナルに入っている SSH のバージョンは 7.9 なので、macOS の ssh-keygen で作成した秘密鍵はデフォルトで OpenSSH フォーマットとなる。
$ ssh -V OpenSSH_7.9p1, LibreSSL 2.7.3
ちなみに、これまでのOpenSSL's PEM フォーマットは$ ssh-keygen -t rsa -f ~/.ssh/test ゴニョゴニョ $ cat ~/.ssh/test -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn 〜 -----END OPENSSH PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY----- 〜 -----END RSA PRIVATE KEY-----
-
他サーバへのSSH接続であれば、特に問題はないので、この変更に気付かなかった。
$ ssh -l ec2-user -i ~/.ssh/id_rsa <接続先サーバ>
OpenSSH フォーマットのキーペアでは knife zero でエラーが起きる
- 例えば、リモートサーバに対して bootstrap を実行するために次のコマンドを実行すると・・
次のようなエラーが。。
$ knife zero bootstrap <接続先サーバ> -x ec2-user -i ~/.ssh/id_rsa --sudo -N node01
〜 Connecting to <接続先サーバ> ERROR: NotImplementedError: OpenSSH keys only supported if ED25519 is available net-ssh requires the following gems for ed25519 support: * rbnacl (>= 3.2, < 5.0) * rbnacl-libsodium, if your system doesn't have libsodium installed. * bcrypt_pbkdf (>= 1.0, < 2.0) See https://github.com/net-ssh/net-ssh/issues/478 for more information Gem::MissingSpecError : "Could not find 'rbnacl' (>= 3.2.0, < 5.0) among 295 total gem(s) Checked in 'GEM_PATH=/home/ec2-user/.chefdk/gem/ruby/2.5.0:/opt/chefdk/embedded/lib/ruby/gems/2.5.0', execute gem env for more information"
従来の OpenSSL's PEM フォーマットで作成するには
- OpenSSH 7.8 のリリースノートにある通り、 "-m PEM" を付ければいいらしい
$ ssh-keygen -t rsa -m PEM
OpenSSH フォーマットの秘密鍵のパスフレーズ剥がし
$ chmod 0600 秘密鍵
$ ssh-keygen -p -f 秘密鍵
Enter old passphrase:
Key has comment '*****'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.
$ chmod 0400 秘密鍵