为所有其他节点提供无密码访问权限。
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 }}"
答案 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