如何在 Ansible 中启动 netcat 监听服务器?

如何在 Ansible 中启动 netcat 监听服务器?

我正在开发更大的 Ansible 剧本。我想使用的任务之一是使用 执行“TCP ping” netcat。在其中一个主机上,我想启动netcat“服务器”,然后启动“客户端”以将任何字符串发送到服务器。

我在没有 Ansible 的情况下测试了这一点——一切正常,但在 Ansible 中netcat返回1。我知道这意味着网络连接未建立。这是我的netcat服务器任务:

- shell: |
    nc -d -q0 -l 1234
  poll: 0
  async: 60

但是,这根本行不通。我尝试在命令末尾添加 & 符号,但没有成功。我做的另一件事是将 poll 设置为 > 0,然后在“服务器”主机上检查端口是否已打开(通过netstat -tulpn)。结果没有。

我在这里遗漏了什么?

答案1

在 CLI 上执行上述命令将导致输出

nc -d -q0 -l 1234 &
[1] 123456
~/test$ Ncat: Invalid -d delay "-q0" (must be greater than 0). QUITTING.
^C
[1]+  Exit 2                  nc -d -q0 -l 1234

由此得出一个最小示例剧本

---
- hosts: test
  become: false
  gather_facts: false

  tasks:

  - name: Start LISTENer on Remote Node
    shell:
      cmd: "nc --listen 1234"
    poll: 0
    async: 60 # seconds

  - name: Test from Control Node
    delegate_to: controlnode.example.com
    wait_for:
      host: "{{ inventory_hostname }}"
      port: 1234
      state: drained
      delay: 0
      timeout: 3 # seconds
      active_connection_states: SYN_RECV

  - name: Test via nc
    delegate_to: controlnode.example.com
    shell:
      cmd: "nc -vz {{ inventory_hostname }} 1234"
    register: result

  - name: Show result
    debug:
      var: result

将导致输出

TASK [Start LISTENer on Remote Node] ************************
changed: [test1.example.com]
changed: [test2.example.com]
changed: [test3.example.com]

TASK [Test from Control Node] *******************************
ok: [test1.example.com -> controlnode.example.com]
ok: [test2.example.com -> controlnode.example.com]
ok: [test3.example.com -> controlnode.example.com]

TASK [Test via nc] ******************************************
changed: [test1.example.com -> controlnode.example.com]
changed: [test2.example.com -> controlnode.example.com]
changed: [test3.example.com -> controlnode.example.com]

TASK [Show result] ******************************************
ok: [test1.example.com] =>
  result:
    changed: true
    cmd: nc -vz test1.example.com 1234
    delta: '0:00:00.034145'
    end: '2023-01-28 13:30:00.291207'
    failed: false
    msg: ''
    rc: 0
    start: '2023-01-28 13:30:00.257062'
    stderr: |-
      Ncat: Version 7.50 ( https://nmap.org/ncat )
      Ncat: Connected to 192.168.2.1:1234.
      Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.
    stderr_lines:
    - 'Ncat: Version 7.50 ( https://nmap.org/ncat )'
    - 'Ncat: Connected to 192.168.2.1:1234.'
    - 'Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.'
    stdout: ''
    stdout_lines: []
...

关于

我想要使​​用的任务之一是执行“TCP ping”......

建议使用wait_for模块 – 等待条件满足后再继续代替

... 使用 netcat 执行“TCP ping”。

正如我们从提供的示例输出中看到的那样,并且由于结果集和行为的差异。

更多文档

相关内容