【问题标题】:Trying to test run playbook. Getting permission denied试图测试运行剧本。获得许可被拒绝
【发布时间】:2020-11-09 20:17:43
【问题描述】:

我正在尝试对剧本进行“试运行”。我的目标机器可以通过 ssh 进入,反之亦然。当我运行ansible all -m ping -vvv 时,这是输出。

Using module file /usr/lib/python2.7/dist-packages/ansible/modules/core/system/ping.py
<192.168.4.136> ESTABLISH SSH CONNECTION FOR USER: hwaraich207970
<192.168.4.136> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=username -o ConnectTimeout=10 -o ControlPath=/home/username/.ansible/cp/ansible-ssh-%h-%p-%r 192.168.4.136 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo ~/.ansible/tmp/ansible-tmp-1604952591.08-32914241935398 ` " && echo ansible-tmp-1604952591.08-32914241935398="` echo ~/.ansible/tmp/ansible-tmp-1604952591.08-32914241935
398 `" ) && sleep 0'"'"'' 
192.168.4.136 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n",
    "unreachable": true

【问题讨论】:

    标签: ssh ansible debian


    【解决方案1】:

    即使您已确定系统 A 和系统 B 之间的无密码 ssh(例如使用 ssh-copy-id 命令或通过手动复制公钥,即系统 A 上的 idrsa.pub 文件的内容到系统 B 上的 .ssh/authorizedkeys 文件。如果发生这种情况,原因之一可能是用户主目录。

    在系统 A 上的用户主目录是 /home/tester,在系统 B 上是 /users/tester,那么无密码 ssh 可能无法工作。确保两个用户具有相同的主目录可以解决此问题。我在 CentOS 机器上观察到这种情况,并确保用户的主目录相同,问题得到解决。

    【讨论】:

      【解决方案2】:

      Ansible 通常在将控制器节点的 ssh 公钥添加到远程节点的授权密钥时工作。这使ansible 无需密码即可从受控节点 ssh 进入远程节点。

      还有一种替代方法可以使用 sshpass 在不共享公钥的情况下使 ansible 工作。在这种情况下,您需要通过ansible_ssh_pass 变量输入远程用户的密码。这可以通过inventory filegroup_varsextra-vars 完成。

      关于您分享的错误。上面写着“Permission denied”,表示 ssh 密钥共享或密码设置有问题。

      msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n",
      

      调试模式提供了与问题相关的更多信息:

      SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=username -o ConnectTimeout=10 -o ControlPath=/home/username/.ansible/cp/ansible-ssh-%h-%p-%r 192.168.4.136 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo ~/.ansible/tmp/ansible-tmp-1604952591.08-32914241935398 ` " && echo ansible-tmp-1604952591.08-32914241935398="` echo ~/.ansible/tmp/ansible-tmp-1604952591.08-32914241935
      

      你可以从上面的sn-p中提取一些相关信息:

      1. -o User=username:这意味着 playbook 正在尝试从 username 用户 ID 执行。
      2. -o PasswordAuthentication=no:这将强制 ansible 使用公钥而不是密码。
      3. 192.168.4.136 发生此身份验证失败。

      请查看this 了解有关 ansible 连接的官方信息。
      检查this 在节点之间生成和共享 ssh 密钥。

      【讨论】:

        猜你喜欢
        • 2020-09-18
        • 1970-01-01
        • 1970-01-01
        • 2019-12-05
        • 1970-01-01
        • 1970-01-01
        • 2015-10-21
        • 2021-09-07
        • 2016-07-15
        相关资源
        最近更新 更多