远程连接

从Ansible 1.3开始,默认使用原生的OpenSSH来和远程主机通讯。这种方式回激活ControlPersist(一种性能提升),Kerberos以及在~/.ssh/config中配置的Jump Host等设置。

有关ControlPersist,请参考ssh多路传输multiplexing加速

然而,在RHEL 6操作系统中,由于OpenSSH版本过于陈旧,可能不支持ControlPersist。在这些操作系统,Ansible将使用名为paramikoPython实现的OpenSSH调用。如果需要实现类似Kerberized SSH等高级功能,考虑使用Fedora, OS X或Ubuntu等使用了新版本OpenSSH的操作系统。

在Ansible 1.2等旧版本,默认使用paramiko,原生SSH使用是通过-c ssh选项或者配置文件设置。

在远程主机通讯中,Ansible默认假定使用SSH key,可以用--ask-pass参数来使用密码认证方式,但建议使用密钥认证。

第一个命令

编辑(或创建)/etc/ansible/hosts文件来维护远程主机列表。这些系统中应该已经分发了authorized_keys

[exampleserver]
192.168.1.50
aserver.example.org
bserver.example.org

这是一个清单文件,详细请参考清单。注意,如果SSH访问主机使用特定身份,则需要再主机名后添加 ansible_user=USERBANE 设置。

为了能够不必每次都输入SSH key的保护密码,需要设置SSH agent:

ssh-agent bash
ssh-add ~/.ssh/id_rsa

详细有关ssh密钥技术和ssh agent使用方法,请参考ssh密钥

现在开始测试访问所有的节点

ansible all -m ping

这里-m ping是使用ansible的SSH机制来测试远程主机的可访问性,并不是使用ping命令

all表示hosts配置中所有主机

返回信息可以看到,ansible是使用ssh作为ping,然后看输出是否正确来显示pong。输出类似

192.168.1.2 | UNREACHABLE! => {
    "changed": false,
    "msg": "ERROR! SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue",
    "unreachable": true
}
192.168.1.3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.1.1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

如果要使用指定用户帐号,例如bruce帐号,以及使用bruce用户帐号登录后再sudoroot用户,可以使用

# as bruce
$ ansible all -m ping -u bruce
# as bruce, sudoing to root
$ ansible all -m ping -u bruce --sudo
# as bruce, sudoing to batman
$ ansible all -m ping -u bruce --sudo --sudo-user batman

# With latest version of ansible `sudo` is deprecated so use become
# as bruce, sudoing to root
$ ansible all -m ping -u bruce -b
# as bruce, sudoing to batman
$ ansible all -m ping -u bruce -b --become-user batman

下面我们来测试一个简单的命令,向所有主机发送uname -a指令

ansible all -a "uname -a"
192.168.1.2 | UNREACHABLE! => {
    "changed": false,
    "msg": "ERROR! SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue",
    "unreachable": true
}
192.168.1.3 | SUCCESS | rc=0 >>
Linux host3.exmaple.com 2.6.32-504.16.2.el6.x86_64 #1 SMP Wed Apr 22 06:48:29 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

192.168.1.2 | SUCCESS | rc=0 >>
Linux host2.exmaple.com 2.6.32-220.el6.x86_64 #1 SMP Wed Nov 9 08:03:13 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

主机key检查

Ansible 1.2.1以及更高版本默认启用了主机key检查。如果服务器重新安装,并且在known_hosts文件中有不同的key,就会导致错误消息。

如果希望禁止这个特性,可以在/etc/ansible/ansible.cfg或者~/.ansible.cfg中添加配置

[defaults]
host_key_checking = False

也可以通过设置环境变量来实现:

export ANSIBLE_HOST_KEY_CHECKING=False

results matching ""

    No results matching ""