Ubuntu WSL Ansible - 用户@localhost 权限被拒绝(公钥,密码)
Posted
技术标签:
【中文标题】Ubuntu WSL Ansible - 用户@localhost 权限被拒绝(公钥,密码)【英文标题】:Ubuntu WSL Ansible - user@localhost Permission denied(publickey,password) 【发布时间】:2020-09-11 17:24:49 【问题描述】:我正在使用 ubuntu WSL 作为 ansible 的控制器。 尝试在 localhost 中安装 python 依赖项,然后启动一个 ec2 实例 但由于以下错误而失败: "msg": "通过 ssh 连接主机失败:kevin@localhost: Permission denied (publickey,password)。"
我做了什么来解决: 1.做了ssh-keygen 2.生成公钥/私钥rsa密钥对。 3.输入保存密钥的文件(/home/user/.ssh/id_rsa): 4.最后 $ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
工作成功:
1.ssh localhost 为 kevin@localhost 工作
2.首先我使用带有 pem 文件的现有 RHEL ec2 实例,这样我可以运行我的任务并启动实例
事情不正常:
--2 错误类型--
Playbook 任务有同样的问题
失败:[localhost] (item=webserverA) =>
"ansible_loop_var": "item", "item": "webserverA", "msg": "无法通过 ssh 连接到主机:kevin@localhost: Permission denied (publickey,password).", "unreachable “: 真的 致命的:[本地主机]:无法访问! => "changed": false, "msg": "All items completed", "results": ["ansible_loop_var": "item", "item": "webserverA", "msg": "连接失败通过 ssh 的主机:kevin@localhost: Permission denied (publickey,password).", "unreachable": true]
为用户建立本地连接:
凯文
执行 /bin/sh -c 'echo ~kevin && sleep 0'
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
" ) && sleep 0'
"msg": "身份验证或权限失败。在某些情况下,您可能已经能够进行身份验证并且对目标目录没有权限。请考虑将 ansible.cfg 中的远程 tmp 路径更改为以 \ 为根的路径“/tmp\”。失败的命令是:( umask 77 && mkdir -p \"echo /home/kevin/.ansible/tmp/ansible-tmp-1590382762.0043557-97164890408687
\" && echo ansible-tmp-1590382762.0043557-97164890408687=\"echo /home/kevin/.ansible/tmp/ansible-tmp-1590382762.0043557-97164890408687
\" ),以结果 1 退出,stdout 输出: ansible-tmp-1590382762.0043557-97164890408687=/home/kevin/.ansible/tmp/ansible-tmp-1590382762.0043557-97164890408687\n",
说明: 1.在 ansible.cfg 文件中,应该为 private_key_file .pem 文件或 id_rsa 提供哪个密钥 我的理解是 ssh localhost 我们需要 id_rsa 和 ssh ec2 实例我们需要 .pem 文件 因此,请支持解决问题 1
2.对于问题 2,我尝试在 ansible.cfg 和 connection=local 中提供 remote_tmp 路径但不起作用
库存文件:
主机开发
[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).\r\n')
<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'"'"''
【问题讨论】:
【参考方案1】:您从 Amazon 获得的 .pem 和 id_rsa 一样是私钥。
通过执行 ssh -i ~/.ssh/id_rsa kevin@localhost 来验证您的 Ansible 应该做什么。
如果这可行,那么您基本上拥有所有需要的部分,并且应该查看您的 ansible 配置来确定。
如果您无法执行以下验证:
您是否有权访问该密钥?它应该是 chmod 400,所有者是您运行 Ansible 的用户。 该服务器上的用户是否正确? 在末尾添加 -v 将提供更详细的调试,您可以继续附加另一个 v(即 -vv 或 -vvv)以获得更详细的调试,最多可达 4 次。你的 ansible.cfg 应该是这样的
[defaults]
private_key_file = /home/kevin/.ssh/id_rsa
【讨论】:
是的,我可以执行 ssh -i ~/.ssh/id_rsa kevin@localhost。 对,你能粘贴更多的配置示例 My Playbook as a play 1.Hosts as Localhost 需要运行 python 角色并启动 ec2 实例。在 ansible.cfg private_key_file = /home/kevin/.ssh/id_rsa 和 chmod 400 权限为用户“kevin”提供 嗨,您能否验证 ansible.cfg 文件看起来与我添加到答案中的完全一样 是的,我用你的验证了我的 ansible.cfg,它是一样的。请检查我的详细输出以上是关于Ubuntu WSL Ansible - 用户@localhost 权限被拒绝(公钥,密码)的主要内容,如果未能解决你的问题,请参考以下文章
无法在 WSL Ubuntu 20.04.3 LTS(焦点)中使用本地主机上的 Ansible 模块服务启动 Apache2
在 WSL 2 上使用 Ansible 通过 snap 安装 microk8s
在 WSL2 Ubuntu 中使用 Laravel 运行 Python 会导致“找不到模块”
Win10专业版系统PyCharm专业版使用WSL(ubuntu20.04 LTS)配置Docker解释器配置环境详细教程