使用Ansible进行连接
自动化工具 〜连接〜
利用清单文件(本次统一使用hosts.yml)、ansible.cfg和ssh_config来连接ansible,并在各种情况下灵活运用。
连接完成后,请按照自己的喜好进行操作。
用于连接确认的命令
ansible -m ping all -i hosts.yml
all是ansible自動識別的主機放入的群組。
正如其名,包含所有主機作為目標。
初级意味着在某个领域的起始阶段。
正常连接
- hosts.yml
all:
hosts:
server1:
ansible_host: 192.168.122.100
ansible_user: vagrant
ansible_ssh_private_key_file: ~/.ssh/id_rsa
Ansible使用公開密钥认证进行登录。
“为什么平时就在登录???”
我认为我认为。我有这样的想法。
当使用-vvv选项执行命令时,会显示大量冗长的输出信息,
通过运行ansible -m ping all -vvv,就可以理解,
ansible -m ping并不执行ping操作,而是尝试通过SSH登录,
如果登录成功,则返回SUCCESS。
使用密码验证连接
- hosts.yml
all:
hosts:
server1:
ansible_host: 192.168.122.100
ansible_user: vagrant
ansible_pass: vagrant
如果设置了ansible_pass,将尝试使用密码验证进行登录。
但是直接在文件中写入密码有些不太合适。
使用密码验证连接ask_pass。
- hosts.yml
all:
hosts:
server1:
ansible_host: 192.168.122.100
ansible_user: vagrant
- ansible.cfg
[defaults]
ask_pass = True
通过在ansible.cfg文件中将ask_pass的值设置为True,可以在执行ansible命令之前提示输入密码。
$ ansible -m ping all
SSH password:
server1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
不需要在ansible.cfg中进行记录,而是在命令执行时使用–ask-pass选项。
$ ansible -m ping all --ask-pass
SSH password:
server1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
中等水平
连接到本地主机
- hosts.yml
all:
hosts:
server1:
ansible_connection: local
如果将ansible_connection的值设置为local,则将访问localhost。此时不需要进行SSH连接,因此不需要设置ansible_user或ansible_ssh_pass。
使用ssh_config进行连接
当您进行SSH连接时,ssh_config文件是一个配置文件。
文件自身是OpenSSH的配置文件,但与ansible结合使用时非常方便。
- hosts.yml
all:
hosts:
server1: {}
- ansible.cfg
[ssh_connection]
ssh_args = -F ssh_config
- ssh_config
Host server1
HostName 192.168.122.100
User vagrant
Port 22
PasswordAuthentication no
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
在ansible.cfg配置文件中,我们添加了用于ansible进行ssh连接的选项。
由于我们已经在ssh_config文件中记录了所有的连接信息,因此在hosts.yml文件中没有进行任何设置。
高層、領導、主管
通过跳板服务器连接
利用ssh_config的ProxyCommand可以通过跳板服务器进行访问。
这更像是关于OpenSSH,而不是ansible的话题。
以下是本次配置:
[ansible] --> [server1(踏み台)] --> [server2(目的のサーバー)]
- hosts.yml
all:
hosts:
server1: {}
server1: {}
- ansible.cfg
[ssh_connection]
ssh_args = -F ssh_config
- ssh_config
Host server1
HostName 192.168.122.100
User vagrant
Port 22
PasswordAuthentication no
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
Host server2
HostName 192.168.122.101
User vagrant
Port 22
PasswordAuthentication no
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
ProxyCommand ssh -F ssh_config -W %h:%p server1
只需在ssh_config中写入ProxyCommand设置。
设置ProxyCommand后,在连接目标主机之前,会先执行指定的命令。
然后会建立到另一台主机的ssh连接,再进行ssh连接。
利用档案移植进行连接。
经由跳板服务器进行端口转发来进行ssh连接。
这也与ansible的讨论不同,更像是关于OpenSSH的。
本次配置如下
[ansible] --> [server1(踏み台)] --> [server2(目的のサーバー)]
将server2的22号端口连接到localhost的10022号端口。
ssh -F ssh_config -f -N -L 10022:server2:22 server1
只要通过本地主机的10022端口访问,就会被转发到server2的22号端口。然后只需通过本地主机的10022端口进行ssh连接即可。
- hosts.yml
all:
hosts:
server1: {}
server1: {}
- ansible.cfg
[ssh_connection]
ssh_args = -F ssh_config
- ssh_config
Host server1
HostName 192.168.122.100
User vagrant
Port 22
PasswordAuthentication no
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
Host server2
HostName 127.0.0.1
User vagrant
Port 10022
PasswordAuthentication no
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
结束了
我希望能找到其他不同的连接方式和解决方案后再继续添加。
如果您有什么想法,请在评论中给予。