如何在linux中为另一个用户生成ssh密钥,并在ansible中自动执行

时间:2016-10-15 15:30:27

标签: linux bash ssh scripting ansible

我正在通过shell配置程序配置vagrant box,后者又对localhost执行ansible游戏。我正在使用以下剧本

---
- name: Provision vagrant1 box
  hosts: localhost
  tasks:
   - name: Install nmap
     apt: name=nmap state=latest update_cache=yes

   - name: Install sshpass
     apt: name=sshpass state=latest update_cache=yes

   - name: Generate ssh key
     shell: "ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N ''"

现在的问题是,shell配置程序,因此ansible play以root身份执行,因为我必须为用户vagrant和可能的其他用户设置ssh密钥。

此外,自动创建ssh密钥并将公钥复制到已知主机时,首先感觉笨重且易碎,因为可能信任服务器提示和密码输入提示,密码可能会有所不同。自动为不同用户创建ssh密钥并将公钥复制到ansible中未知数量的远程服务器的最佳方法是什么?

对于那些好奇的人,我打算用nmap找到网络上的所有远程服务器,并使用sshpass提供密码以帮助自动化ssh-copy-id。

1 个答案:

答案 0 :(得分:1)

在Ansible剧本中为用户生成SSH密钥的正确方法是使用generate_ssh_key关键字the user module。这样就可以使用正确的权限生成密钥,并且不会覆盖现有密钥(除非您希望这样做):

---
- hosts: your_host
- user:
    ...
    generate_ssh_key=yes
    ...