Ansible 使用自定义 ssh 配置文件
Ansible Using Custom ssh config File
我有一个自定义 SSH 配置文件,我通常按如下方式使用它
ssh -F ~/.ssh/client_1_config amazon-server-01
是否可以指定 Ansible 为某些组使用此配置?它已经设置好密钥、端口和用户。我有多个客户端的这种配置,如果可能的话,我想将配置分开。
不完全可能。您可以在 ansible.cfg
中设置 ssh 参数:
[ssh_connection]
ssh_args = -F ~/.ssh/client_1_config amazon-server-01
遗憾的是,无法针对每个组、库存或任何其他特定内容进行定义。
使用 Ansible 2,您可以在 ansible_ssh_common_args 清单变量中设置 ProxyCommand。连接到相关主机时,此变量中指定的任何参数都会添加到 sftp/scp/ssh 命令行。考虑以下库存组:
[gatewayed]
foo ansible_host=192.0.2.1
bar ansible_host=192.0.2.2
您可以使用以下内容创建 group_vars/gatewayed.yml:
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q user@gateway.example.com"'
然后做这个把戏...
您可以在以下位置找到更多信息:http://docs.ansible.com/ansible/faq.html
我相信你可以在你的库存中实现你想要的:
[group1]
server1
[group2]
server2
[group1:vars]
ansible_ssh_user=vagrant
ansible_ssh_common_args='-F ssh1.cfg'
[group2:vars]
ansible_ssh_user=vagrant
ansible_ssh_common_args='-F ssh2.cfg'
然后您可以随心所欲地构建 SSH 配置文件,例如:
$ cat ssh1.cfg
Host server1
HostName 192.168.1.1
User someuser
Port 22
IdentityFile /path/to/id_rsa
参考资料
另一种方式,
假设您在各种服务器的配置分组中关联了 ssh 密钥身份文件,就像我在 ~/.ssh/config 文件中所做的那样。如果你有一堆这样的条目。
Host wholewideworld
Hostname 204.8.19.16
port 22
User why_me
IdentityFile ~/.ssh/id_rsa
PubKeyAuthentication yes
IdentitiesOnly yes
他们的工作方式与
ssh wholewideworld
到 运行 ansible adhock 命令是 运行
eval $(ssh-agent -s)
ssh-add ~/.ssh/*rsa
输出如下:
Enter passphrase for /home/why-me/.ssh/id_rsa:
Identity added: /home/why-me/.ssh/id_rsa (/home/why-me/.ssh/id_rsa)
现在你应该可以在你的 ~/ansible-hosts 中包含 wholewideworld
从配置文件中输入主机别名后,它只适用于 运行
ansible all -ping
输出:
127.0.0.1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
wholewideworld | SUCCESS => {
"changed": false,
"ping": "pong"
}
我有一个自定义 SSH 配置文件,我通常按如下方式使用它
ssh -F ~/.ssh/client_1_config amazon-server-01
是否可以指定 Ansible 为某些组使用此配置?它已经设置好密钥、端口和用户。我有多个客户端的这种配置,如果可能的话,我想将配置分开。
不完全可能。您可以在 ansible.cfg
中设置 ssh 参数:
[ssh_connection]
ssh_args = -F ~/.ssh/client_1_config amazon-server-01
遗憾的是,无法针对每个组、库存或任何其他特定内容进行定义。
使用 Ansible 2,您可以在 ansible_ssh_common_args 清单变量中设置 ProxyCommand。连接到相关主机时,此变量中指定的任何参数都会添加到 sftp/scp/ssh 命令行。考虑以下库存组:
[gatewayed]
foo ansible_host=192.0.2.1
bar ansible_host=192.0.2.2
您可以使用以下内容创建 group_vars/gatewayed.yml:
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q user@gateway.example.com"'
然后做这个把戏...
您可以在以下位置找到更多信息:http://docs.ansible.com/ansible/faq.html
我相信你可以在你的库存中实现你想要的:
[group1]
server1
[group2]
server2
[group1:vars]
ansible_ssh_user=vagrant
ansible_ssh_common_args='-F ssh1.cfg'
[group2:vars]
ansible_ssh_user=vagrant
ansible_ssh_common_args='-F ssh2.cfg'
然后您可以随心所欲地构建 SSH 配置文件,例如:
$ cat ssh1.cfg
Host server1
HostName 192.168.1.1
User someuser
Port 22
IdentityFile /path/to/id_rsa
参考资料
另一种方式,
假设您在各种服务器的配置分组中关联了 ssh 密钥身份文件,就像我在 ~/.ssh/config 文件中所做的那样。如果你有一堆这样的条目。
Host wholewideworld
Hostname 204.8.19.16
port 22
User why_me
IdentityFile ~/.ssh/id_rsa
PubKeyAuthentication yes
IdentitiesOnly yes
他们的工作方式与
ssh wholewideworld
到 运行 ansible adhock 命令是 运行
eval $(ssh-agent -s)
ssh-add ~/.ssh/*rsa
输出如下:
Enter passphrase for /home/why-me/.ssh/id_rsa:
Identity added: /home/why-me/.ssh/id_rsa (/home/why-me/.ssh/id_rsa)
现在你应该可以在你的 ~/ansible-hosts 中包含 wholewideworld 从配置文件中输入主机别名后,它只适用于 运行
ansible all -ping
输出:
127.0.0.1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
wholewideworld | SUCCESS => {
"changed": false,
"ping": "pong"
}