Ansible 生成的 SSH 密钥适用于 Java 17,但不适用于 Java 8

问题描述 投票:0回答:1

我正在使用 Ansible 脚本生成 SSH 密钥,该脚本在 Java 17 上运行良好,但是在使用 Java 8 时不起作用。问题似乎与私钥中使用的加密算法有关。

当我使用

putty-gen
生成密钥时,它适用于两个版本,但是 ansible 生成的密钥仅适用于较新的版本,但不适用于旧版本。

sshkeys

puttygen 的

DES-EDE3
加密(三重 DES)适用于 Java 8 和 17,而 Ansible 脚本生成的
AES-256
加密仅适用于 Java 17。

Ansible 脚本

---
- name: Generate SSH key with passphrase and set permissions
  hosts: localhost
  connection: local
  vars:
    ssh_private_key_filepath: "{{ ssh_private_key_filepath }}"
    ssh_public_key_filepath: "{{ ssh_public_key_filepath }}"
    ssh_passphrase: "{{ ssh_passphrase }}"
  tasks:
    - name: Generate private key
      community.crypto.openssl_privatekey:
        path: "{{ ssh_private_key_filepath }}"
        type: RSA
        size: 4096
        passphrase: "{{ ssh_passphrase }}"
        cipher: auto
        state: present
        force: false
      register: private_key

    - name: Generate public key
      community.crypto.openssl_publickey:
        path: "{{ ssh_public_key_filepath }}"
        privatekey_path: "{{ ssh_private_key_filepath }}"
        privatekey_passphrase: "{{ ssh_passphrase }}"
        state: present
        force: false
        format: "OpenSSH"
      when: private_key.changed

    - name: Set permissions for private key
      file:
        path: "{{ ssh_private_key_filepath }}"
        mode: '400'

    - name: Set permissions for public key
      file:
        path: "{{ ssh_public_key_filepath }}"
        mode: '600'

如何修改 Ansible 脚本或密钥生成过程,以使生成的密钥与 Java 8 和 Java 17 版本兼容。

java encryption ssh ansible ssh-keys
1个回答
0
投票

community.crypto.openssl_publickey

cipher 的唯一选择是“auto”,这意味着您需要的内容尚未实现。

您需要使用 shell 模块和

openssl

ansible.builtin.shell: cmd: "openssl genrsa -des3 -passout pass:{{ lookup('env','MY_PASS') }} 4096 > {{ ssh_private_key_filepath }}" creates: "{{ ssh_private_key_filepath }}" register: private_key no_log: true
    
© www.soinside.com 2019 - 2024. All rights reserved.