ssh - 如何以正确的方式将 Ansible playbook 运行到多个服务器?

标签 ssh ansible

Ansible 使用 ssh 将软件设置到远程主机。

如果刚安装了一些新机器,从一台主机运行 Ansible playbook 将不会连接它们,因为远程主机上没有授权 key 。

如果将 Ansible 主机的 pub key 复制到这些目标主机,例如:

$ ssh user@server "echo \"`cat .ssh/id_rsa.pub`\" >> .ssh/authorized_keys"

首先应该 ssh 登录并在每个远程主机上创建文件:
$ mkdir .ssh
$ touch .ssh/authorized_keys

这是将 Ansible playbook 运行到远程服务器的常用方法吗?有没有更好的方法存在?

最佳答案

我认为最好也使用 Ansible 来做到这一点,使用 authorized_key module .例如,为用户 root 授权您的 key :

ansible <hosts> -m authorized_key -a "user=root state=present key=\"$(cat ~/.ssh/id_rsa.pub)\"" --ask-pass

这也可以在剧本中完成,目标用户作为变量,默认为 root :
- hosts: <NEW_HOSTS>
  vars:
  - username: root    

  tasks:
  - name: Add authorized key
    authorized_key: 
      user: "{{ username }}"
      state: present
      key: "{{ lookup('file', '/home/<YOUR_USER>/.ssh/id_rsa.pub') }}"

并执行:
ansible-playbook auth.yml --ask-pass -e username=<TARGET_USER>

您的用户应该有特权,如果不使用 became .

关于ssh - 如何以正确的方式将 Ansible playbook 运行到多个服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44276426/

相关文章:

ansible - 在 Ansible 中注册和使用多个变量

ansible - 如何重试可能失败的 Ansible 任务?

linux - 通过 SSH 属性传输文件夹的脚本

linux - Bash 脚本适用于 ssh,但不适用于 php

git - 使用 Cloud9 和 Openshift 时警告 : setlocale: LC_ALL: cannot change locale (C. UTF-8)

Ansible默认变量命名似乎不一致

mercurial - Ansible Mercurial 克隆挂起

设置 SSH 后 Github 权限被拒绝(公钥)

python - 调用通过 ssh 创建子进程的 Python 脚本挂起

amazon-web-services - 使用 Ansible 启用 AWS VPC 流日志