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

WSL Ubuntu 20.04 LTS 修改默认登陆用户

在 WSL2 Ubuntu 中使用 Laravel 运行 Python 会导致“找不到模块”

WSL2修改存储位置(示例:Docker-Desktop)

Win10专业版系统PyCharm专业版使用WSL(ubuntu20.04 LTS)配置Docker解释器配置环境详细教程