search
LoginSignup
3

More than 3 years have passed since last update.

posted at

updated at

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3