knife-zero

パスフレーズ付き秘密鍵を使った knife zero converge

概要

  • 今更ながら knife solo から knife zero へスキルシフトしている。その時に躓いたことをメモしておく。

  • AWS で EC2 を利用する場合は、たいてい AWSマネジメントコンソール から作成したキーペアを使っている。 けど、それには秘密鍵にパスフレーズが付いていない。セキュリティの感度が高い人は独自にパスフレーズ付き秘密鍵のキーペアを作成してインポートしているはず。

  • macOS にある chefレシピ を knife zero で chefクライアントである EC2 (ホスト名:chef-client-host) へ収束するときにパスフレーズ付き秘密鍵のキーペアを使う場合は、knife zero 実行前に ssh-agent で秘密鍵を登録しておく必要がある。

  • macOS側の .ssh/config と、EC2(chef-client-host) の knife zero bootstrap は設定済み。

エラー&トライ

  • エラーメッセージ
$ knife zero converge "name:chef-client-host" --sudo
WARNING: Failed to connect to ec2-x-x-x-x.ap-northeast-1.compute.amazonaws.com -- Net::SSH::AuthenticationFailed: Authentication failed for user foo@ec2-x-x-x-x.ap-northeast-1.compute.amazonaws.com@ec2-x-x-x-x.ap-northeast-1.compute.amazonaws.com
ERROR: NoMethodErrorundefined method `forward' for nil:NilClass
ERROR: /Users/foo/.chefdk/gem/ruby/2.4.0/gems/knife-zero-1.19.1/lib/knife-zero/bootstrap_ssh.rb:32:in `block in ssh_command'
/Users/foo/.chefdk/gem/ruby/2.4.0/gems/knife-zero-1.19.1/lib/knife-zero/bootstrap_ssh.rb:30:in `each'
  • 対処
    「-x」オプションでユーザー名を指定する
    「ssh-add」で鍵を登録する
▼ssh-agent起動
$ eval `ssh-agent`
Agent pid 3726

▼秘密鍵を登録する
$ ssh-add ~/.ssh/秘密鍵
Enter passphrase for /Users/foo/.ssh/秘密鍵:
パスフレーズを入力

▼確認
$ ssh-add -l
4096 SHA256:***** /Users/foo/.ssh/秘密鍵 (RSA)

▼収束開始
$ knife zero converge "name:chef-client-host" -x ec2-user --sudo

▼鍵の登録を削除
$ ssh-add -d ~/.ssh/秘密鍵