我正在尝试将自定义公钥对上传到我的Amazon AWS账户,因为我想使用自定义生成的密钥对与AWS进行通信。我正在尝试使用Ansible的ec2_key
模块执行此上传。
这是我到目前为止所做的:
步骤1.注册Amazon AWS账户here。我输入了“AWS账户名称”和密码。
步骤2.安装Python包AWS CLI
和boto
:
$ pip install awscli boto
步骤3.生成SSH密钥对(我也使用了Ansible):
- name: Generate a 2048-bit SSH key for user
user:
name: "{{ ansible_ssh_user }}"
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_file: ~/.ssh/id_rsa
步骤4.我将公钥(~/.ssh/id_rsa.pub
)的内容复制到/home/username/.aws/credentials
。
步骤5.使用Ansible task使用Ansible将公钥上传到Amazon AWS:
vars:
aws_access_key_id: my_key_name
aws_region: "us-west-2"
aws_secret_access_key: "ssh-rsa Y...r"
tasks:
- name: example3 ec2 key
ec2_key:
name: "{{ aws_access_key_id }}"
region: "{{ aws_region }}"
key_material: "{{ aws_secret_access_key }}"
state: present
force: True
validate_certs: yes
步骤5的输出是:
An exception occurred during task execution. ..."module_stderr": "Traceback (most
recent call last):\n File \"/tmp/ansible_WqbqHU/ansible_module_ec2_key.py\",...
raise self.ResponseError(response.status, response.reason,
body)\nboto.exception.EC2ResponseError: EC2ResponseError: 401 Unauthorized\n<?xml
version=\"1.0\" encoding=\"UTF-8\"?>
\n<Response><Errors><Error><Code>AuthFailure</Code><Message>AWS was not able to
validate the provided access credentials</Message></Error></Errors>...
以下是我的/home/username/.aws/credentials
(我刚刚编写了一些key_id
):
[default]
aws_access_key_id = my_key_name
aws_secret_access_key = ssh-rsa Y...r
这是我的/home/username/.aws/config
:
[default]
output = json
region = us-west-2
这两个文件似乎都同意AWS文档要求here。
其他信息:
become
。ansible==2.4.1.0
boto==2.48.0
,botocore==1.7.47
问题
ec2_key
模块的Ansible任务中的某处错过了这一步。/home/username/.aws/credentials
中有SAME公钥。这个Ansible任务缺少什么/不正确吗?应该有第二张公钥吗?答案 0 :(得分:2)
您已将SSH公钥放入secret_access_key字段。
对我来说这看起来像这样(字母混合并在此替换,而不是我真正的密钥):
[Credentials]
aws_access_key_id = FMZAIQGTCHSLGSNDIPXT
aws_secret_access_key = gcmbyMs1Osj3ISCSasFtEx7sVCr92S3Mvjxlcwav
如果您转到IAM(https://console.aws.amazon.com/iam),您可以重新生成密钥。 您需要转到IAM-&gt;用户,单击您的用户名,单击安全凭据和“创建访问密钥”。
如果您刚刚设置了自己的帐户,则可能是您没有IAM用户,只有所谓的root帐户用户(您注册的用户)。在这种情况下,请单击主屏幕顶部的名称,然后选择我的安全凭据。您可能会收到警告,但在您的情况下不用担心,您没有运营大型组织。单击“访问密钥”下拉列表,然后单击“创建新访问密钥”(您可能没有)。这将为您提供所需的钥匙。将它们保存在某个地方,因为当您离开屏幕时,您将不再有机会看到秘密访问密钥,只有密钥ID。
但是,如果您使用的是附加了角色的计算机,则根本不需要凭据,boto应该选择它们。
答案 1 :(得分:1)
您的密码在您的凭据中显示错误。如果您从附加了IAM角色的EC2实例运行,那么应与IAM用户关联或留空;不是你要上传的密钥。
答案 2 :(得分:0)
您可以通过SSH连接到主机吗?我认为未经授权的错误来自您尝试访问主机。
就像是:
ssh ec2-user@165.0.0.105 - i my_key.pem
您可以在aws控制台中查看公共IP地址。如果您在那里遇到错误,请仔细检查实例是否接受安全配置文件中的ssh流量。