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
$ 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 秘密鍵