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

如何使用Ansible检查服务器列表的SSH连接权限

解决Ansible检查SSH连通性的方案

一、替代check_ssh模块的可行方法

Ansible并没有专门的check_ssh模块,以下两种方法可以直接实现SSH连通性检查:

方法1:优化现有ping模块方案

ping模块依赖SSH连接成功才能执行,因此可以用它间接验证SSH连通性,同时修正你现有playbook的逻辑错误:

  • 原playbook存在表头重复写入、条件判断逻辑错误、delegate_to格式问题
  • 优化后版本:
---
- name: 检查SSH连通性并生成CSV报告
  hosts: all
  gather_facts: no  # 关闭事实收集,提升执行速度

  tasks:
    - name: 测试目标主机SSH可达性
      ansible.builtin.ping:
      register: test_ssh
      ignore_unreachable: true

    - name: 初始化CSV文件(仅当文件不存在时创建)
      ansible.builtin.file:
        path: /home/list.csv
        state: touch
        mode: '0644'
      delegate_to: localhost
      run_once: true  # 仅执行一次,避免多主机重复操作

    - name: 写入CSV表头(仅当文件为空时)
      ansible.builtin.lineinfile:
        dest: /home/list.csv
        line: "Server;access"
        state: present
        insertbefore: BOF
      delegate_to: localhost
      run_once: true
      when: lookup('file', '/home/list.csv') | length == 0

    - name: 记录SSH连通成功的主机
      ansible.builtin.lineinfile:
        dest: /home/list.csv
        line: "{{ inventory_hostname }};OK"
        state: present
      delegate_to: localhost
      when: test_ssh is successful

    - name: 记录SSH连通失败的主机
      ansible.builtin.lineinfile:
        dest: /home/list.csv
        line: "{{ inventory_hostname }};KO"
        state: present
      delegate_to: localhost
      when: test_ssh.unreachable is defined and test_ssh.unreachable

方法2:直接用command模块执行SSH测试

如果想跳过目标主机的Python环境依赖,直接在master上执行SSH命令测试:

---
- name: 直接测试SSH连通性
  hosts: all
  gather_facts: no

  tasks:
    - name: 执行SSH连接测试
      ansible.builtin.command: ssh -o ConnectTimeout=3 -o StrictHostKeyChecking=no {{ inventory_hostname }} exit 0
      register: ssh_test
      ignore_errors: true
      delegate_to: localhost  # 在master本地执行SSH命令

    - name: 生成CSV记录
      ansible.builtin.lineinfile:
        dest: /home/list.csv
        line: "{{ inventory_hostname }};{{ 'OK' if ssh_test.rc == 0 else 'KO' }}"
        state: present
      delegate_to: localhost

二、关于ansible.builtin.ssh的说明

ansible.builtin.ssh是Ansible的连接插件,用于定义Ansible通过SSH连接目标主机的方式,并非可在tasks中调用的任务模块,因此无法直接用于连通性测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:50:29