我正在使用ubuntu WSL作为ansible的控制器。 尝试在本地主机中安装 python 依赖项,然后启动 ec2 实例 但由于以下错误而失败: "msg":"无法通过 ssh 连接到主机: kevin@localhost:权限被拒绝(公钥、密码(。
我做了什么来修复:1.做了 ssh-keygen 2.生成公钥/私钥 rsa 密钥对。 3.输入保存密钥的文件(/home/user/.ssh/id_rsa(: 4.最后 $ cat ~/id_rsa.pub>> ~/.ssh/authorized_keys
工作之道:
1.ssh 本地主机正在为 kevin@localhost 工作
2.首先我使用带有 pem 文件的现有 RHEL ec2 实例,有了这个我可以运行我的任务并启动实例
不起作用的事情:
--2 错误类型--
具有相同问题的剧本任务
失败: [本地主机] (项目=网络服务器 A( =>
{"ansible_loop_var": "item", "item": "webserverA", "msg": "无法通过 ssh 连接到主机: kevin@localhost: 权限被拒绝(公钥,密码(。", "无法访问": true} 致命:[本地主机]:无法访问!=> {"changed": false, "msg": "all items complete", "results": [{"ansible_loop_var": "item", "item": "webserverA", "msg": "无法通过 ssh 连接到主机: kevin@localhost: 权限被拒绝(公钥,密码(.", "无法访问": true}]}
<127.0.0.1> 为用户建立本地连接:
凯文 <127.0.0.1> EXEC/bin/sh -c 'echo ~kevin && sleep 0' <127.0.0.1> EXEC/bin/sh -c '( umask 77 && mkdir -p "
echo /home/kevin/.ansible/tmp/ansible-tmp-1590382761.4873009-58188090245831
" && echo ansible-tmp-1590382761.4873009-58188090245831="echo /home/kevin/.ansible/tmp/ansible-tmp-1590382761.4873009-58188090245831
" ( && 睡眠 0'"msg": "身份验证或权限失败。在某些情况下,您可能已经能够进行身份验证,但对目标目录没有权限。考虑将 ansible.cfg 中的远程 tmp 路径更改为根植于 \"/tmp\" 的路径。失败的命令是:( umask 77 && mkdir -p \"
ansible-tmp-1590382762.0043557-97164890408687=\"echo /home/kevin/.ansible/tmp/ansible-tmp-1590382762.0043557-97164890408687
\" && echoecho /home/kevin/.ansible/tmp/ansible-tmp-1590382762.0043557-97164890408687
\"(,退出,结果为 1,标准输出输出:ansible-tmp-1590382762.0043557-97164890408687=/home/kevin/.ansible/tmp/ansible-tmp-1590382762.0043557-97164890408687",
澄清:1.In ansible.cfg 文件应该为private_key_file .pem 文件或id_rsa提供哪个密钥 我的理解是 ssh 本地主机我们需要id_rsa和 ssh ec2 实例我们需要 .pem 文件 所以请支持修复问题 1
2.对于问题 2,我试图在 ansible 中给出remote_tmp路径.cfg并且连接=本地但不起作用
库存文件:
主机开发
[webservers]
localhost ansible_user=kevin
**Play.yml**
- name: Creates the ec2 instances
hosts: localhost
gather_facts: no
roles:
- python
tasks:
- name: Launch an EC2 Instance
ec2_instance:
//Using the access keys here
详细输出:
<localhost> ESTABLISH SSH CONNECTION FOR USER: kevin
<localhost> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=30m -o 'IdentityFile="/home/kevin/.ssh/id_rsa"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="kevin"' -o ConnectTimeout=10 -o ControlPath=/home/kevin/.ansible/cp/9faa73ac6e localhost '/bin/sh
-c '"'"'echo ~kevin && sleep 0'"'"''
<localhost> (255, b'', b'kevin@localhost: Permission denied (publickey,password).rn')
<localhost> ESTABLISH SSH CONNECTION FOR USER: kevin
<localhost> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=30m -o 'IdentityFile="/home/kevin/.ssh/id_rsa"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="kevin"' -o ConnectTimeout=10 -o ControlPath=/home/kevin/.ansible/cp/9faa73ac6e localhost '/bin/sh
-c '"'"'echo ~kevin && sleep 0'"'"''
你从亚马逊得到的.pem是一个私钥,就像id_rsa一样。
通过执行 ssh -i ~/.ssh/id_rsa kevin@localhost 来验证您的 Ansible 应该做什么。
如果这有效,您基本上拥有所需的所有部分,并且应该查看您的 ansible 配置来确定。
如果无法执行以下验证:
- 您是否有权访问密钥?它应该是 chmod 400,所有者是您运行 Ansible 的用户。
- 这是该服务器上的正确用户吗?
- 在末尾添加 -v 将提供更详细的调试,您可以继续附加另一个 v(即 -vv 或 -vvv(以获得更详细的调试,最多 4 与
你的安西.cfg应该是这样的
[defaults]
private_key_file = /home/kevin/.ssh/id_rsa