Ansible节点之间无密码访问

时间:2016-06-30 03:15:05

标签: ansible

为所有其他节点提供无密码访问权限。

For each node:   
  Get public ssh key   
  Add that key to authorized_keys files of all other nodes

以下是我尝试过的内容,但它没有按预期工作。

- name: Get ssh public key from all the nodes for some_user user
  shell: cat ~/.ssh/id_rsa.pub
  register: ssh_pub_key
  become: yes
  become_user: some_user
  changed_when: "ssh_pub_key.rc != 0"
  always_run: yes

- set_fact:
    auth_keys: "{{ ssh_pub_key.stdout | join() }}"

- debug: var=auth_keys

- name: Add public key to all other nodes for some_user user
  authorized_key:
    user: some_user
    key: "{{ ssh_pub_key.stdout }}"

2 个答案:

答案 0 :(得分:1)

不需要从每个节点收集每个ssh密钥并将它们分发到每个节点,这是不好的做法。

请改用ssh代理转发。

您只需要一个密钥(将其创建到中央服务器或使用现有服务器),然后将pub(通过ansible)推送到您的节点。

答案 1 :(得分:0)

将存储库克隆到启用了ansible的主机上

git clone https://github.com/ilias-sp/ansible-setup-passwordless-ssh.git

或者,您可以从此存储库下载ansible_setup_passwordless_ssh.yml和主机。

运行:

ansible-playbook -i hosts ansible_setup_passwordless_ssh.yml

通过运行此剧本,这些事情会发生在您的主机上:

Localhost:生成一个SSH密钥,并将其放置在.ssh文件夹下。它的文件名是可配置的,默认值为ansible_rsa。此SSH密钥已添加到〜/ .ssh / config文件中,供SSH客户端在连接到远程主机时使用。

远程主机:生成的SSH密钥将传播到您在主机清单文件中配置的远程主机列表,并添加到其〜/ .ssh / authorized_keys文件中。使用用于此作业的ssh-copy-id linux实用程序完成此操作。 sshpass linux实用程序用于协助运行脚本,而无需提示输入用户密码。

参考:https://github.com/ilias-sp/ansible-setup-passwordless-ssh