使用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

结束了

我希望能找到其他不同的连接方式和解决方案后再继续添加。

如果您有什么想法,请在评论中给予。

广告
将在 10 秒后关闭
bannerAds