将ssl证书从服务器复制到ansible中的主机
Copy the ssl certificate from a server to a host in ansible
我正在尝试将本地容器注册表的证书复制到具有 ansible 版本 2.9.6 的 Docker 主机。注册表由其他人管理,但在我们的本地网络中。
对于 shell 我会这样做:
openssl s_client -showcerts -connect registry.example:443 < /dev/null 2> /dev/null | openssl x509 -outform PEM > ca.crt
到目前为止,我围绕 community.crypto
模块工作,以便 ansible ans 设法获得证书:
- name: get certificate from registry
community.crypto.get_certificate:
host: "{{ registry_url }}"
port: "{{ registry_port }}"
delegate_to: localhost
become: no
register: cert
这与 shell 备选方案的前半部分类似。我还没有弄清楚的是如何完成下半部分的工作,即使用从服务器接收到的内容创建证书。
我尝试使用 community.crypto.x509_certificate
,但我无法使其表现得像以下 shell 示例中的 openssl_client
。
openssl x509 -outform PEM -in server_content_file -text -out ca.crt
有没有办法使用 community.crypto
模块或以任何其他方式使用 ansible 来做到这一点?
您还没有追求的一个选项只是 运行 Ansible 中的 openssl
命令。以下示例假设您已将 remotehost
变量设置为例如registry.example
:
- hosts: localhost
gather_facts: false
tasks:
- name: get remote certificate
command: openssl s_client -showcerts -connect {{ remotehost }}
register: remotecert
- name: extract certificate
command: openssl x509 -outform PEM
args:
stdin: "{{ remotecert.stdout }}"
register: remotex509
- name: write ca.crt
copy:
dest: ./ca.crt
content: "{{ remotex509.stdout }}"
虽然不太细化,但您当然可以组合所有内容
放入单个 shell 脚本中:
- hosts: localhost
gather_facts: false
tasks:
- name: get remote certificate
shell: >-
openssl s_client -showcerts -connect {{ remotehost }} |
openssl x509 -outform PEM > ca.crt
args:
creates: ca.crt
register: remotecert
creates
参数将导致任务被跳过,如果目标
文件 (ca.crt
) 已经存在。
我正在尝试将本地容器注册表的证书复制到具有 ansible 版本 2.9.6 的 Docker 主机。注册表由其他人管理,但在我们的本地网络中。
对于 shell 我会这样做:
openssl s_client -showcerts -connect registry.example:443 < /dev/null 2> /dev/null | openssl x509 -outform PEM > ca.crt
到目前为止,我围绕 community.crypto
模块工作,以便 ansible ans 设法获得证书:
- name: get certificate from registry
community.crypto.get_certificate:
host: "{{ registry_url }}"
port: "{{ registry_port }}"
delegate_to: localhost
become: no
register: cert
这与 shell 备选方案的前半部分类似。我还没有弄清楚的是如何完成下半部分的工作,即使用从服务器接收到的内容创建证书。
我尝试使用 community.crypto.x509_certificate
,但我无法使其表现得像以下 shell 示例中的 openssl_client
。
openssl x509 -outform PEM -in server_content_file -text -out ca.crt
有没有办法使用 community.crypto
模块或以任何其他方式使用 ansible 来做到这一点?
您还没有追求的一个选项只是 运行 Ansible 中的 openssl
命令。以下示例假设您已将 remotehost
变量设置为例如registry.example
:
- hosts: localhost
gather_facts: false
tasks:
- name: get remote certificate
command: openssl s_client -showcerts -connect {{ remotehost }}
register: remotecert
- name: extract certificate
command: openssl x509 -outform PEM
args:
stdin: "{{ remotecert.stdout }}"
register: remotex509
- name: write ca.crt
copy:
dest: ./ca.crt
content: "{{ remotex509.stdout }}"
虽然不太细化,但您当然可以组合所有内容 放入单个 shell 脚本中:
- hosts: localhost
gather_facts: false
tasks:
- name: get remote certificate
shell: >-
openssl s_client -showcerts -connect {{ remotehost }} |
openssl x509 -outform PEM > ca.crt
args:
creates: ca.crt
register: remotecert
creates
参数将导致任务被跳过,如果目标
文件 (ca.crt
) 已经存在。