在运行Ansible角色以禁用密码登录后,权限被拒绝(公钥)

在运行Ansible角色以禁用密码登录后,权限被拒绝(公钥),ansible,Ansible,我有一本Ansible的剧本,其中包括: 我为远程服务器生成SSH密钥 然后我在角色ssh 最后,我为根帐户设置了密码 剧本的2)和3)部分如下所示: - hosts: new_servers become: yes tasks: - block: - name: Run ssh role to enable login using SSH keys and disable password login include_role:

我有一本Ansible的剧本,其中包括:

  • 我为远程服务器生成SSH密钥
  • 然后我在角色
    ssh
  • 最后,我为根帐户设置了密码
  • 剧本的2)和3)部分如下所示:

    - hosts: new_servers
      become: yes
    
      tasks:
        - block:
    
          - name: Run ssh role to enable login using SSH keys and disable password login
            include_role:
              name: ssh
    
          - name: Set Password on root Account
            user:
              name: user
              password: "{{ user_password_hash }}"
              update_password: always
    
    
    ssh
    角色有以下
    tasks/main.yml
    ,灵感来自:

    处理程序
    重新启动SSH
    如下所示:

    ---
    
    - name: Restart SSH
      service:
        name: sshd
        state: restarted
    
    当我运行这个playbook时,它运行
    ssh
    角色的所有任务,但是在运行重新启动
    sshd
    服务的处理程序的最后一步失败,可能是因为密码登录现在被禁用了

    PLAY [new_servers] *********************************************************************************************************************************************************************************************************************
    
    TASK [Gathering Facts] ***********************************************************************************************************************************************************************************************************************ok: [cm002]
    
    TASK [Run ssh role to enable login using SSH keys and disable password login] ******************************************************************************************************************************************************
    
    TASK [ssh : Set SSH port] **********************************************************************************************************************************************************************************************************ok: [cm002] => changed=true
      backup: ''
      msg: line added
    
    TASK [ssh : Disable root SSH login] ************************************************************************************************************************************************************************************************ok: [mauocmacst002] => changed=true
      backup: ''
      msg: line added
    
    TASK [ssh : Disable SSH password authentication] ***********************************************************************************************************************************************************************************changed: [mauocmacst002] => changed=true
      backup: ''
      msg: line added
    
    RUNNING HANDLER [ssh : Restart SSH] ************************************************************************************************************************************************************************************************fatal: [cm002]: FAILED! =>
      msg: 'Failed to connect to the host via ssh: user@cm002: Permission denied (publickey).'
    
    NO MORE HOSTS LEFT ***************************************************************************************************************************************************************************************************************************
    
    PLAY RECAP ***********************************************************************************************************************************************************************************************************************************
    cm002              : ok=0   changed=3    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
    
    

    如何重新启动更改生效所需的
    sshd
    服务?

    我相信您可以使用
    set\u fact:
    并在生成ssh密钥对后更改ansible身份验证机制,从而将ansible连接切换到使用新密钥对-您尝试过吗?@mdaniel谢谢,我没有尝试过,但我意识到错误的原因是因为我在我的
    ansible.cfg
    文件中添加了SSH参数
    -o ServerAliveInterval=60
    ,以防止服务器在执行长时间任务(如
    apt get dist upgrade
    )时与主机断开连接。有了这个参数,Ansible似乎试图重新建立与主机的SSH连接,但由于无法再使用密码而出错。您认为使用
    set\u fact
    来使用
    ansible\u private\u key\u file
    是同时获得所需效果的方法,还是有其他方法?
    PLAY [new_servers] *********************************************************************************************************************************************************************************************************************
    
    TASK [Gathering Facts] ***********************************************************************************************************************************************************************************************************************ok: [cm002]
    
    TASK [Run ssh role to enable login using SSH keys and disable password login] ******************************************************************************************************************************************************
    
    TASK [ssh : Set SSH port] **********************************************************************************************************************************************************************************************************ok: [cm002] => changed=true
      backup: ''
      msg: line added
    
    TASK [ssh : Disable root SSH login] ************************************************************************************************************************************************************************************************ok: [mauocmacst002] => changed=true
      backup: ''
      msg: line added
    
    TASK [ssh : Disable SSH password authentication] ***********************************************************************************************************************************************************************************changed: [mauocmacst002] => changed=true
      backup: ''
      msg: line added
    
    RUNNING HANDLER [ssh : Restart SSH] ************************************************************************************************************************************************************************************************fatal: [cm002]: FAILED! =>
      msg: 'Failed to connect to the host via ssh: user@cm002: Permission denied (publickey).'
    
    NO MORE HOSTS LEFT ***************************************************************************************************************************************************************************************************************************
    
    PLAY RECAP ***********************************************************************************************************************************************************************************************************************************
    cm002              : ok=0   changed=3    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0