web-dev-qa-db-ja.com

ナイフは新しくインスタンス化されたEC2サーバーにSSH接続できません

現在Chefの知識を広げているので、新しいChef環境をセットアップしました。 EC2にキーペアを設定し、ナイフ構成を設定しました。サーバーをスポーンしようとすると、ノードは作成されますが、Knifeはそれにsshできません。

これが私のknife.rb(レポの外にあります)です:

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "mynode"
client_key               "/Users/me/.chef/my.pem"
validation_client_name   "my-validator"
validation_key           "/Users/me/.chef/my-validator.pem"
chef_server_url          "https://api.opscode.com/organizations/myorg"
cache_type               'BasicFile'
cache_options( :path => "/Users/me/.chef/checksums" )
cookbook_path            ["/Users/me/git/chef/cookbooks"]

knife[:aws_access_key_id] = "yadayadyada"
knife[:aws_secret_access_key] = "blahblahblah"
knife[:identity_file] = "/Users/me/.ssh/knife.pem"
knife[:aws_ssh_key_id] = "knife"

これが私のナイフコマンドです:

knife ec2 server create -r "role[whatever]" -I AMI-09470539 --subnet subnet-03e44866 -f t2.micro --ssh-user ubuntu --region us-west-2 -Z us-west-2a

また、pemを直接指定して試してみました。

knife ec2 server create -r "role[whatever]" -I AMI-09470539 --subnet subnet-03e44866 -f t2.micro -S knife -i ~/.ssh/knife.pem --ssh-user ubuntu --region us-west-2 -Z us-west-2a

これは、VPCグループ内のHVMインスタンスです。

私が試し、確認したこと...

  1. はい、pemには適切な権限(400)があります。
  2. はい、EC2セキュリティグループ(「デフォルト」)はポート22で世界中からアクセスできます。
  3. はい、コマンドラインのknife.pemキーを使用して直接SSH接続できます。
  4. はい、私はこれを徹底的にグーグルで検索し、3つの異なるチュートリアルを読みました。私はすべてを正しく行ったようです。

私が見逃しているものは他にありますか?

詳細モードでは、これが私が見ているものです...

Waiting for sshd
.DEBUG: ssh timed out: 172.nnn.nnn.nnn
.DEBUG: ssh timed out: 172.nnn.nnn.nnn
3
Ian Atkin

EC2で最初にシェフを設定したときに、この正確な問題に遭遇しました。 knifeを使用してEC2インスタンスを正常に起動するために使用するコマンドは次のとおりです。

knife ec2 server create \
--flavor m3.medium \
--image AMI-****** \
--iam-profile "iam-app" \
--ebs-size 30 \
--security-group-ids sg-**** \
--subnet subnet-6de**** \
--ssh-key my-key-name \
--ssh-user ubuntu \
--ssh-port 22 \
--identity-file "/local/path/to/ssh/key/for/this/instance" \
--ssh-gateway [email protected] \ #remove this line if you're not connecting through a bastion Host
--server-connect-attribute private_ip_address \ # Because we connect through a bastion Host we want to explicitly connect to the the private IP address.  You may want to set this to the public IP address.  I believe these are fog attributes.
--node-name "test-play-1" \
--tags Name="test-play-1",Environment="Test" \
--run-list "role[app]" \
--environment test

各EC2インスタンスに直接接続するのではなく、要塞ホストを使用してインスタンスに接続することをお勧めします。また、公開サーバーの場合、次のような行を使用してElasticIPアドレスを明示的に割り当てます。

--associate-eip 54.186.***.*** 
2
Josh Padnick

多くの実験が必要だったので、私たちのために働いたものを追加したかっただけですなし要塞ホスト:

knife ec2 server create   --image AMI-xxxxx                       \
                      --flavor t2.medium                      \
                      --run-list 'recipe[recipe-name]'        \
                      --security-group-id sg-xxxxx            \
                      --region us-east-1                      \
                      --node-name $1 -T Name=$1               \
                      --subnet subnet-xxxxx                   \
                      --ssh-user ubuntu                       \
                      --ssh-key key_name                      \
                      --identity-file "~/.ssh/key_file_name"  \
                      --server-connect-attribute dns_name     \
                      --associate-eip $2                      \
                      --associate-public-ip                   \
                      --no-Host-key-verify      

ここで、最初のパラメーターはインスタンス名で、2番目のパラメーターはパブリックエラスティックIPです。

乾杯!

2
Dave Collins

もちろん、コンピュータから離れるとすぐに、問題が何であるかがわかりました...

knifeプライベートIPを使用してsshを実行しようとしています。 D'oh!

私は--associate-public-ipそれを修正します。私はコンピューターから離れているので、後でテストします。アドバイスを確認/拒否/提供してください。

1
Ian Atkin

私はパブリックIPとこれを介して接続しているので--server-connect-attribute public_ip_address私のために働きます。

0
Prasad