ansible建立ssh密钥信任

使用ansible批量部署服务的前提是建立免秘钥登录。
服务器较多时,一个一个手动使用ssh-copy-id建立免密钥登录也是不小的工作量。
怎样批量建立免密钥登录呢?

想法1
先在本机生成公钥,写个脚本使用ssh-copy-id进行,这里需要知道每个ip对应密码。

想法2
网上找来的

ansible init_hosts -m file -a "path=/root/.ssh owner=root group=root state=directory" -k
ansible init_hosts -m copy -a "src=authorized_keys dest=/root/.ssh/authorized_keys owner=root group=root mode=0644" -k

有如下报错?
clipboard.png

阅读 8.8k
3 个回答

自问自答吧,这里,应该是使用脚本实现的。

新手上路,请多包涵

expect+ssh-copy-id,前提知道每个ip和密码。

除了使用 ssh-copy-id 指令進行操作外,還可以使用 authorized_key module 來使用,底下附上先前帶 workshop 時寫的簡易 playbook。

$ vim push_ssh_pub_key.yml
---

# Push the ssh public key to managed nodes.
- name: ==> push the ssh public key ...
  hosts: all
  become: true
  vars:
    username: docker

  tasks:
    - name: create ssh key directory
      file:
        path: '/home/{{ username }}/.ssh/'
        state: directory
        owner: '{{ username }}'
        group: '{{ username }}'
        mode: 0700

    - name: set authorized key took from file
      authorized_key:
        user: '{{ username }}'
        state: present
        key: "{{ lookup('file', 'files/id_rsa.pub') }}"

# vim:ft=ansible:

https://github.com/chusiang/c...

如同 @phil 提到的,在還未傳入 ssh public key 之前,是需要先使用密碼登入的,屆時您第一次需使用類似以下的指令,來覆寫 username 和 password 才行。

$ ansible-playbook push_ssh_pub_key.yml -u <USERNAME> -kK
宣传栏