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


我正在玩Amazon EC2来创建实例。我在这里读书: 这里是EC2的刀具文件,我需要设置:

# 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来创建新节点?


4
2018-01-27 18:41




你能否确认是否收到错误 当您尝试在knife.rb中设置安全凭据时 或者当你执行一个 knife ec2 create命令?如果是后者,您可以使用执行的确切命令更新您的问题吗? - rhetonik
密钥对用于ssh身份验证,这与您的aws访问密钥和密钥不同。您可以在您的帐户的安全凭据下找到这些,但我建议您创建一个IAM用户并授予其特定权限,而不是使用root登录。 IAM用户将拥有自己的一组访问和密钥来使用。 - Jason Floyd
创建一个IAM用户非常有趣。我只是想,谢谢 - poseid
嗯..现在我得到:错误:Fog :: Compute :: AWS :: NotFound:密钥对'/Users/pmu/.chef/new_test.pem'不存在 - poseid


答案:


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

确切地说,当您启动时,错误应该出现:

knife ec2 server create -I <ami-id>

错误

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

是因为你的SSH Keypair丢失了 knife ec2 server create 命令。每次启动Amazon EC2实例时,都需要指定SSH密钥对。此SSH公钥将添加到新启动的实例中以启用无密码SSH登录。密钥对可以创建或导入。密钥对(美国东部地区)可以在 EC2 - > Keypairs部分 您的Amazon AWS控制台。

选择SSH密钥对后,您可以在您的密钥对中指定它的名称 knife ec2 create 命令为:

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

注意:这将启动指定的EC2实例 AMI-ID 并使用SSH密钥对。刀将朝着 knife bootstrap 一旦实例启动。为此,您需要确保将SSH密钥对的私钥添加到ssh-agent会话中 之前 发起一个 knife ec2 server create。您可能还希望使用指定Chef服务器URL --server-url 的选择 knife ec2 server create


9
2018-01-28 13:02



此外,刀文件中AWS键的格式对于那些也被刀格式规则混淆的人来说真的是刀[:...] ='key' - poseid


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

knife[:aws_ssh_key_id] = 'pemfilename'

pemfilename 应该是没有.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]"

8
2017-08-07 21:00



这对我有用。只需添加一个警告 - [:aws_secret_access_key]位于控制台右上角的用户名 - >安全凭证下。 - jmreicha


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

刀[:aws_ssh_key_id] =“myawshosts”


2
2018-02-15 02:42





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

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

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


1
2017-10-12 13:09