仅当任务所需的包具有正确版本时,我才运行任务时遇到问题。在我的示例中,它是 OpenSSH 服务器。仅在 6.5 或更高版本上才能生成 ed25519 主机 key 。
这是我的任务:
- name: ensure openssh-server is present
apt:
pkg: openssh-server
state: latest
install_recommends: no
force: yes
default_release: "{{ sshd_apt_backports_distribution }}"
notify: restart sshd
- name: ensure ed25519 host key is present
command: ssh-keygen -q -t ed25519 -N "" -f ssh_host_ed25519_key
args:
chdir: /etc/ssh
creates: /etc/ssh/ssh_host_ed25519_key
错误:
failed: [localhost] => {"changed": true, "cmd": ["ssh-keygen", "-q", "-t", "ed25519", "-N", "", "-f", "ssh_host_ed25519_key"], "delta": "0:00:00.012330", "end": "2015-05-17 12:16:51.062852", "rc": 1, "start": "2015-05-17 12:16:51.050522", "warnings": []}
stderr: unknown key type ed25519
只有在存在 OpenSSH 6.5 或更高版本时才应触发第二个任务。您可以看到here我的构建失败,因为 Travis CI 测试在 Ubuntu 12.04 LTS 下运行,并且没有实际的 OpenSSH 版本。
最佳答案
您可以通过两步完成此操作。
首先注册openssh-server版本:
- name: Get openssh-server version
shell: 'dpkg -s openssh-server | grep "^Version" | sed -re "s/^.*:([0-9]+\.[0-9]+).*/\1/"'
register: openssh_version
然后根据需要创建 key :
- name: ensure ed25519 host key is present
command: ssh-keygen -q -t ed25519 -N "" -f ssh_host_ed25519_key
args:
chdir: /etc/ssh
creates: /etc/ssh/ssh_host_ed25519_key
when: openssh_version.stdout | version_compare('6.5', '>=')
我还没有测试过,所以 YMMV,但它应该接近你需要的。 可能还有一种更简单的方法来检查 openssh-server 版本。
关于ssh - Ansible:当包版本大于或等于时执行某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30296400/