外网Ansible服务器经过堡垒机管理内网中的服务器
外网的Ansible经过堡垒机配置内网中的服务器:
正常情况下,Ansible会通过ssh**的方式,管理同一网段中的服务器。但是,存在这种情况,即企业中在每个省都有自己的服务器,但是各省只有少数几台服务器,并且这几台服务器中,有一台是代理服务器,管理员,通过代理服务器,跳到内网中的服务器,实现管理操作的。Ansible适合中小规模的场景,即200台服务器,为了区区几台服务器,使用Ansible来管理,有些麻烦。有一种方式,就是再公网中搭建一个Ansible服务器,该Ansible服务器通过堡垒机,管理内网中的服务器。这样有一个问题,就是,Ansible是通过ssh的**的方式来链接到被管理端的。此时,需要Ansible使用**的方式,直接连接到内网中的服务器。
实验:三台centos6的虚拟机A、B、C:
A主机:外网中的ansible主机,管理端;(192.168.1.134)B主机:内网中的跳板机,跳板机;(192.168.1.112、192.168.109.229)
C主机:内网中的主机,被管理端;(192.168.109.228)
要实现的结果是:Ansible服务器可以通过跳板机管理内网中的主机,具体操作如下:
A主机上:
# ssh-****** -f /root/.ssh/ansible_id_rsa
# ssh-copy-id -i ansible_id_rsa 192.168.1.112
# cd /root/.ssh
# ssh -i ansible_id_rsa 192.168.1.112
B主机上:
# ssh-****** -f /root/.ssh/jumper_id_rsa
# ssh-copy-id -i jumper_id_rsa 192.168.109.228
# cd /root/.ssh
# tree
.
├── authorized_keys
├── jumper_id_rsa
├── jumper_id_rsa.pub
└── known_hosts
# ssh 192.168.109.228 -i jumper_id_rsa
# cat jumper_id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEoQIBAAKCAQEAwkHdGJtG/TVqOjRrf0LWdKGczAb2erGbuObrQbzTKL7Fxbw0
………………………………………………………………………………
-----END RSA PRIVATE KEY-----
# cat jumper_id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAII/8bfnTt4………zBB/nnhj5oYHLDMUiPQ== [email protected]
A主机上:
# pwd
/root/.ssh
# vim jumper_id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEoQIBAAKCAQEAwkHdGJtG/TVqOjRrf0LWdKGczAb2erGbuObrQbzTKL7Fxbw0
………………………………………………………………………………
-----END RSA PRIVATE KEY-----
# chmod 600 jumper_id_rsa
# vim jumper_id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAII/8bfnTt4………zBB/nnhj5oYHLDMUiPQ== [email protected]
# vim ssh_config
Host 192.168.1.112 # 跳板机访问规则的别名;
User root
HostName 192.168.1.112
IdentityFile /root/.ssh/ansible_id_rsa # 访问跳板机的私钥;
PasswordAuthentication no
Host 192.168.109.228 # 访问规则的别名;
Hostname 192.168.109.228
User root
ForwardAgent yes # 此配置项是关键;
ProxyCommand ssh -i /root/.ssh/ansible_id_rsa [email protected] -p 22 nc %h %p
IdentityFile /root/.ssh/jumper_id_rsa # 访问后端主机的私钥;
# tree
.
├── ansible_id_rsa
├── ansible_id_rsa.pub
├── jumper_id_rsa
├── jumper_id_rsa.pub
├── known_hosts
└── ssh_config
注意:需要把B主机上的两个**文件拷贝到A主机上。
注意:私钥文件的权限是“-rw-------”。
C主机上:
# pwd
# /root/.ssh
# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAA………………………………UQ/pMjvlzBB/nnhj5oYHLDMUiPQ== [email protected]
tree
.
└── authorized_keys
A主机上:
# ssh 192.168.1.112 -F /root/.ssh/ssh_config # 验证Ansible主机是否可以通过ssh_config文件链接到跳板机。
# ssh 192.168.109.228 -F /root/.ssh/ssh_config # 验证Ansible主机是否可以通过ssh_config文件链接到C主机。
# yum install ansible # epel仓库。
# vim /etc/ansible/ansible.cfg
[defaults]
timeout = 20
[ssh_connection]
ssh_args = -F /root/.ssh/ssh_config
# vim /etc/ansible/hosts
192.168.1.112 # B主机IP;
192.168.109.228 # C主机IP;
# ansible 192.168.109.228 -m ping # 验证ansible是否可以正常工作。
192.168.109.228 | SUCCESS => {
"changed": false,
"ping": "pong"
}
注意:链接的时候,可能会有一些慢,原因是,目标主机的sshd服务开启了 UseDNS和GSSAPIAuthentication配置。为了加快效率,建议将/etc/ssh/sshd_config文件中的这两项关掉。并重启sshd服务。
帮助文档:
http://www.cnblogs.com/junneyang/p/6073714.html
https://zhuanlan.zhihu.com/p/27746055
https://www.bbsmax.com/A/nAJv6n13Jr/
http://www.cweye.net/2015/07/17/ansible-jumper.html