Ssh

Knife 無法 ssh 進入新實例化的 EC2 伺服器

  • August 4, 2016

我剛剛建立了一個新的 Chef 環境,因為我目前正在擴展我對 Chef 的了解。我在 EC2 上設置了密鑰對,我設置了 Knife 配置。當我嘗試生成伺服器時,會創建節點,但 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. 是的,我已經用Google搜尋了這個並閱讀了三個不同的教程。我似乎做的一切都是正確的。

還有什麼我想念的嗎?

在詳細模式下,這就是我所看到的……

Waiting for sshd
.DEBUG: ssh timed out: 172.nnn.nnn.nnn
.DEBUG: ssh timed out: 172.nnn.nnn.nnn

當我第一次在 EC2 上設置 chef 時,我遇到了這個確切的問題。這是我們用來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 ubuntu@our.bastion.host \ #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 實例。此外,對於面向公眾的伺服器,我們使用這樣的行來顯式分配彈性 IP 地址:

--associate-eip 54.186.***.*** 

引用自:https://serverfault.com/questions/641951