ssh - Ansible:当包版本大于或等于时执行某些操作

标签 ssh ansible

仅当任务所需的包具有正确版本时,我才运行任务时遇到问题。在我的示例中,它是 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/

相关文章:

linux - 在基于 amazon linux AMI 的 ec2 实例上安装 sshpass

java - 通过 JSch shell 的多个命令

maven - 使用 ansible playbook 在 docker 容器内运行 mvn clean install

Azurerm Web 应用程序权限

azure - 警告 : ansible 2. 10.3 不提供额外的 'azure'

permissions - 使用 Ansible 创建 GCE 实例,权限问题

java - 通过 JSch 执行 shell 命令时随机得到空输出

带有 proxycommand 的 sshpass 返回而不运行任何东西

linux - 在等待通过 while 循环建立 SSH 连接后,如何自动运行一些命令

amazon-web-services - Ansible CloudFormation 模块看不到 S3 对象