Help us understand the problem. What is going on with this article?

OpenSSH <= 7.8 と knife zero の落とし穴

More than 1 year has passed since last update.

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-----
    
    ちなみに、これまでのOpenSSL's PEM フォーマットは
    -----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 秘密鍵
tonishy
寒がりインフラエンジニア(今はAWSがメイン) 最近は、WACK の EMPiRE にどハマリ中
https://www.wantedly.com/id/tonishy
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away