LoginSignup
11
3

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-02-08

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 秘密鍵
11
3
2

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
  3. You can use dark theme
What you can do with signing up
11
3