我正在通过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。
答案 0 :(得分:1)
在Ansible剧本中为用户生成SSH密钥的正确方法是使用generate_ssh_key
关键字the user module。这样就可以使用正确的权限生成密钥,并且不会覆盖现有密钥(除非您希望这样做):
---
- hosts: your_host
- user:
...
generate_ssh_key=yes
...