如何配置 Knife 和 EC2 从命令行创建新实例?

如何配置 Knife 和 EC2 从命令行创建新实例?

我正在使用 Amazon EC2 创建实例。我在这里读到:EC2 的 Knife 文档中提供了此内容,我需要设置:

# EC2:
knife[:aws_access_key_id]     = "Your AWS Access Key"
knife[:aws_secret_access_key] = "Your AWS Secret Access Key"

现在,当我尝试从 knife.rb 中的 AWS 控制台设置安全凭证时,我得到了

ERROR: You did not provide a valid 'AWS SSH Key Id' value.

而且,当我创建一个新的“密钥对”时,我得到了一些.pem 文件,这也让我感到困惑。

如何设置我的刀和 EC2 来创建新节点?

答案1

我假设你收到了这个错误创建新节点时并不是当您尝试在 knife.rb 中设置安全凭证时

准确地说,错误应该在你启动时出现:

knife ec2 server create -I <ami-id>

错误

ERROR: You did not provide a valid 'AWS SSH Key Id' value.

是由于您的knife ec2 server create命令中缺少 SSH 密钥对。每次启动 Amazon EC2 实例时,您都需要指定 SSH 密钥对。此 SSH 公钥将添加到新启动的实例中,以启用无密码 SSH 登录。可以创建或导入密钥对。密钥对(适用于美国东部地区)可在以下位置找到EC2 -> 密钥对部分您的 Amazon AWS 控制台。

一旦您选择了 SSH 密钥对,您就可以在命令中指定它的名称knife ec2 create,如下所示:

knife ec2 server create -I <ami-id> -S <your-ssh-keypair-name>

笔记:这将在指定的酰胺并使用 SSH 密钥对。knife bootstrap实例启动后,Knife 将继续执行。为此,您需要确保将 SSH 密钥对的私钥添加到您的 ssh-agent 会话中启动knife ec2 server create。您可能还想使用--server-url选项指定 Chef 服务器 URL knife ec2 server create

答案2

如果要将设置存储在 knife.rb 文件中:

knife[:aws_ssh_key_id] = 'pemfilename'

pem文件名应该是不带 .pem 扩展名的 pem 文件名,并且必须位于:~/.ssh/ 此外,它必须被 chmodded 600:(chmod 600 ~/.ssh/pemfile.pem)

因此如果你的 pem 文件是〜/ .ssh / mypem.pem您需要设置:

knife[:aws_ssh_key_id] = 'mypem'

然后是访问密钥和秘密访问密钥:

knife[:aws_access_key_id] = 'AAAAAAAAAAAAAAAAAAAA'
knife[:aws_secret_access_key] = 'UYUYW/IUYITYUIGGUGIUYGKJHGHG'

保存文件后,您可以运行:

knife ec2 server create --node-name mynodename.mydomain.com --run-list "role[myrole]"

答案3

正如 rhetonik 上面提到的那样 - 您需要指定要用于新服务器的密钥对名称。一种选择是使用 -S 开关将其直接传递给knife ec2命令,另一种选择是将类似以下内容添加到您的knife.rb配置文件中:

刀[:aws_ssh_key_id] =“myawshosts”

答案4

除了其他答案之外。aws_ssh_key_id必须是您在 AWS 账户中注册的“密钥对名称”之一。这通常与您的 ssh 密钥文件名相对应,但可能有所不同。

您可以在 EC2“网络和安全 -> 密钥对”屏幕中看到这些 aws ec2“密钥对名称”值。

如果您使用 AWS CLI,您还可以在运行时查看“KeyName”值aws ec2 describe-key-pairs

相关内容