You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断SSH密钥文件是否被Ansible Vault加密?

问题分析与解决

核心问题1:ansible_vault测试报错

ansible_vault是Ansible旧版本中的测试名称,新版本已将其更名为ansible.builtin.vault_encrypted,直接使用旧名称会触发加载失败错误,你替换为ansible.builtin.vault_encrypted的操作是正确的。

核心问题2:测试结果全为false的原因

你在变量thisistrue中使用的"$ANSIBLE_VAULT;1.2;AES256;dev...."是截断的示例字符串,而ansible.builtin.vault_encrypted测试要求输入完整的、符合Ansible Vault加密格式的字符串,不能用省略号替代加密内容。

另外需要明确:ansible.builtin.vault_encrypted仅用于检测被Ansible Vault加密的内容,和SSH私钥自身的密码保护(比如带passphrase的id_rsa,用OpenSSL加密)是完全不同的格式。如果你的真实需求是判断SSH密钥是否被密码加密,需要用其他方法。

正确示例(检测Ansible Vault加密内容)

如果确实需要检测Ansible Vault加密的字符串,先通过ansible-vault encrypt_string生成测试用的真实加密内容,再进行测试:

# site4.yml
- name: test vault encrypted check
  hosts: localhost
  gather_facts: no

  vars:
    # 用ansible-vault encrypt_string "secret"生成的真实加密内容
    vault_encrypted_str: |
      $ANSIBLE_VAULT;1.2;AES256;dev
      32313036333236383336353038373438363433363730393735373835383337353639323030333432
      3137343830353036353335313835313237343638373334350a3137383232303930333730363835
      383035333730303232383936323938303638333531373532303539383030353736323837353736
      3734353134303836380a3833323136373730303235393135363431373934313939363937393834
      353735323639373438343937323336363231373632303534303637323334303335353130303235
      323437363438383230373535373039383535373139333038313534363638333233373635383734
      303534383435373835343330343736333936353533303637
    plain_str: "any string"
    is_vault_encrypted: '{{ vault_encrypted_str is ansible.builtin.vault_encrypted }}'
    is_not_vault: '{{ plain_str is ansible.builtin.vault_encrypted }}'

  tasks:
    - name: show vault encrypted check result
      ansible.builtin.debug:
        var: is_vault_encrypted

    - name: show plain string check result
      ansible.builtin.debug:
        var: is_not_vault

执行后会得到正确结果:

ok: [localhost] => 
  is_vault_encrypted: true
ok: [localhost] => 
  is_not_vault: false

如果需要检测SSH私钥是否被密码加密

如果你的真实需求是判断SSH私钥(比如id_rsa)是否被passphrase保护,可以通过检查文件内容中是否包含Proc-Type: 4,ENCRYPTED字段实现:

- name: check if SSH key is encrypted
  hosts: localhost
  gather_facts: no
  tasks:
    - name: read SSH private key content
      ansible.builtin.slurp:
        src: ~/.ssh/id_rsa
      register: ssh_key_content

    - name: check for encryption marker
      ansible.builtin.set_fact:
        ssh_key_encrypted: '{{ "Proc-Type: 4,ENCRYPTED" in ssh_key_content.content | b64decode }}'

    - name: show result
      ansible.builtin.debug:
        var: ssh_key_encrypted

内容的提问来源于stack exchange,提问作者rustyshamrock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:30:21