Ansible : 열린 포트의 텔넷 점검에 다른 옵션이 있습니까?


15

저는 Ansible을 처음 사용합니다. 여기 내 임무가 있습니다 ...

400 개 이상의 호스트가 있으며 5 개의 다른 포트가 끝에서 웹 서버로 열려 있는지 확인해야합니다.

개별적으로 로그인하여 실행할 수 있습니다.

telnet mywebserver.com 443
telnet mywebserver.com 80
telnet mywebserver.com 8443

..등등..

Ansible에서 어떤 모듈 또는 플러그인을 사용할 수 있으므로이를 자동화하고 Ansible 서버에 결과 (개방 된 포트 또는 닫힌 포트)를 다시보고합니까?

답변:


28

특정 TCP 포트가 열려 있는지 확인하는 Ansible wait_for 모듈을 사용할 수 있습니다 .

이 경우 모든 포트가 이미 열려 있어야하므로 최소 no를 사용할 수 있습니다. 재시도 횟수, 네트워크 문제를 다루기에 충분합니다.

- name: Check all port numbers are accessible from current host
  wait_for:
    host: mywebserver.com
    port: "{{ item }}"
    state: started         # Port should be open
    delay: 0               # No wait before first check (sec)
    timeout: 3             # Stop checking after timeout (sec)
  ignore_errors: yes
  with_items:
    - 443
    - 80
    - 80443

기본적으로 Ansible은 sleep초당 1 회 (속성을 사용하여 Ansible 2.3에서 구성 가능 ) 확인하므로 포트 당 3 번 확인됩니다.

400 개 이상의 호스트 인벤토리에 대해 플레이 북에서이를 실행하십시오. Ansible은 모든 호스트가 mywebserver.com해당 포트에서 도달 할 수 있는지 병렬로 확인합니다 .

ignore_errors: yes오류가 빨간색으로 표시되지만 실행을 중지하지 않도록 여기에서 사용 합니다.

열린 포트는 ok출력 항목 으로보고 되고 닫힌 포트는 다음과 같이보고됩니다 failed( 이 출력을 보려면 -vv플래그를 사용해야 함 ansible-playbook).

미세 조정 출력

성공 및 실패 사례에 대해보다 구체적인 출력을 원하면 코드를 더 복잡하게하여 두 번째 작업을 추가해야합니다.

  • wait_for작업은 register변수 여야 합니다
  • 두 번째 과제는 사용하는 출력을 생성 debug(예 Jinja2하여 성공 / 실패 상태에 기초한 조건식 )
  • 그런 다음이 두 작업을 모두 with_items루프 없이 포함 파일에 넣고 include... with_items를 사용하여 포트 당 한 번 포함 파일을 호출 하는 기본 플레이 북 작업을 작성해야합니다 .

중요하게는을 설정해야합니다 host: mywebserver.com.
Monica Cellio에 대한 보이콧 SE

@XiongChiamiov- host: x필요하지 않습니다. 방금 Ansible 2.3.1로 다시 테스트했으며 작업 host속성은 wait_for인벤토리에서 처리되는 현재 서버로 기본 설정됩니다.
RichVel

정확하게는 OP가 그것을 무시 해야하는 이유 입니다. 모든 서버 에서 다른 웹 서버에 대한 연결 테스트 하고 있습니다 (질문을 다시 읽으십시오).
Monica Cellio의 보이콧 SE

2
좋은 지적은 hosts속성으로 답변을 업데이트했습니다 .
RichVel

감사합니다! 이것은 나를 위해 일하고, 나를 위해 일할 수있게 해줍니다.
AWhitaker

2

AFAIK에는이 목적을위한 내장 모듈이 없지만 shell+ 를 사용할 수 있습니다 nc.

---
- hosts: all
  tasks:
    - shell: nc -z -w 1 -G 1 my.hostname.com {{ item }} || echo "Port {{ item }} is closed"
      with_items: [80,443,8443]

2
고맙지 만, 이것도 효과가 있지만, 플레이를 더 커스터마이즈 할 수 있기 때문에 첫 번째 제안을 선택했습니다.
AWhitaker

-G 1매뉴얼 페이지에서 무엇을 찾을 수 없습니까?
lonix

0

wait_for 모듈을 동일하게 사용할 수 있습니다

문서에서 인용 한 예 :

- name: Wait 300 seconds for port 8000 of any IP to close active connections, don't start checking for 10 seconds
  wait_for:
    host: 0.0.0.0
    port: 8000
    delay: 10
    state: drained

게시물을 올바르게 형식화하십시오. StackExchange 네트워크의 모든 사이트에서 동일한 마크 다운을 허용하십시오. 형식화에 대한 설명서는 여기
Tensibai

3
BTW 나는이 답변이 RichVel 답변에없는 것을 추가하는 것도 보지 못합니다
Tensibai

0

우리는 그러한 작업을 위해 도구 dda-serverspec ( https://github.com/DomainDrivenArchitecture/dda-serverspec-crate )을 사용합니다. 당신은 당신의 기대를 정의 할 수 있습니다

{:netcat [{:host "mywebserver.com" :port "443"} {:host "telnet mywebserver.com" :port "80"} {:host "telnet mywebserver.com" :port "8443"}]}

로컬 호스트에 대해 또는 ssh에 의해 원격으로 이러한 기대를 테스트하십시오. 원격 테스트의 경우 대상을 정의해야합니다.

{:existing [{:node-name "test-vm1"
:node-ip "35.157.19.218"}
{:node-name "test-vm2" :node-ip "18.194.113.138"}] :provisioning-user {:login "ubuntu"}}

에 의해 테스트를 실행할 수 있습니다 java -jar dda-serverspec.jar --targets targets.edn serverspec.edn

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.