连接方法与详情
本节将向您展示如何扩展和完善 Ansible 为您的清单(inventory)所使用的连接方法。
ControlPersist 与 paramiko
默认情况下,Ansible 使用原生 OpenSSH,因为它支持 ControlPersist(一项性能特性)、Kerberos 以及 ~/.ssh/config 中的选项(例如跳板机 Jump Host 设置)。如果您的控制机使用的是不支持 ControlPersist 的旧版本 OpenSSH,Ansible 将回退到名为 “paramiko” 的 OpenSSH Python 实现。
设置远程用户
默认情况下,Ansible 使用您在控制节点上使用的用户名连接到所有远程设备。如果该用户名在远程设备上不存在,您可以为连接设置不同的用户名。如果您只需要以不同用户身份执行某些任务,请参阅 理解权限提升:become。您可以在 playbook 中设置连接用户
---
- name: update webservers
hosts: webservers
remote_user: admin
tasks:
- name: thing to do first in this playbook
# ...
作为清单中的主机变量
other1.example.com ansible_connection=ssh ansible_user=myuser
other2.example.com ansible_connection=ssh ansible_user=myotheruser
或作为清单中的组变量
cloud:
hosts:
cloud1: my_backup.cloud.com
cloud2: my_backup2.cloud.com
vars:
ansible_user: admin
另请参阅
- ssh – 通过 ssh 客户端二进制文件连接
remote_user关键字和ansible_user变量的详细信息。- 控制 Ansible 的行为:优先级规则
Ansible 优先级规则的详细信息。
设置 SSH 密钥
默认情况下,Ansible 假设您使用 SSH 密钥连接到远程机器。推荐使用 SSH 密钥,但如果需要,您可以使用 --ask-pass 选项进行密码验证。如果您需要为 权限提升(sudo, pbrun 等)提供密码,请使用 --ask-become-pass。
注意
使用 ssh 连接插件(这是默认插件)时,Ansible 不会公开一个通道来允许用户与 ssh 进程之间的通信以手动接受密码来解密 ssh 密钥。强烈建议使用 ssh-agent。
要设置 SSH agent 以避免重复输入密码,您可以执行
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
根据您的设置,您可能希望使用 Ansible 的 --private-key 命令行选项来指定 pem 文件。您也可以添加私钥文件
$ ssh-agent bash
$ ssh-add ~/.ssh/keypair.pem
另一种在不使用 ssh-agent 的情况下添加私钥文件的方法是在清单文件中使用 ansible_ssh_private_key_file,详情请参阅此处:如何构建您的清单。
针对 localhost 运行
您可以通过将服务器名称设为 “localhost” 或 “127.0.0.1” 来针对控制节点运行命令
$ ansible localhost -m ping -e 'ansible_python_interpreter="/usr/bin/env python"'
您可以通过在清单文件中添加以下内容来显式指定 localhost
localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python"
管理主机密钥检查
Ansible 默认启用主机密钥检查。检查主机密钥可以防止服务器欺骗和中间人攻击,但这需要一定的维护。
如果一台主机被重新安装且在 “known_hosts” 中具有不同的密钥,这将导致错误消息,直到被修正。如果新主机不在 “known_hosts” 中,您的控制节点可能会提示确认密钥,如果您是通过 cron 等方式使用 Ansible,这将导致交互式体验。您可能不希望出现这种情况。
如果您理解相关影响并希望禁用此行为,可以通过编辑 /etc/ansible/ansible.cfg 或 ~/.ansible.cfg 来实现
[defaults]
host_key_checking = False
或者,这可以通过 ANSIBLE_HOST_KEY_CHECKING 环境变量来设置
$ export ANSIBLE_HOST_KEY_CHECKING=False
另外请注意,在 paramiko 模式下的主机密钥检查速度较慢,因此在使用此功能时,建议切换到 “ssh” 模式。
其他连接方法
除了 SSH 之外,Ansible 还可以使用多种连接方法。您可以选择任何连接插件,包括本地管理以及管理 chroot、lxc 和 jail 容器。一种名为 “ansible-pull” 的模式还可以反转系统,让系统通过定时 Git checkout “回传” 以从中央仓库拉取配置指令。