2017-03-06 1 views
0

Mein Server-Port klopfen, um weiß-Liste eine IP für Port 22 SSH benötigen eingerichtet ist. Ich habe Anleitungen zum Einrichten eines Ansible-Playbooks gefunden, um das Port-Klopfen auf der Serverseite zu konfigurieren, aber nicht, um auf der Client-Seite Port-Klopfen auszuführen.Wie ein ansible Textbuch mit Port schreiben Klopfen

Zum Beispiel, was würde meine Playbook und/oder Inventar-Dateien aussehen, wenn ich Port 9999, 9000 klopfen muss, dann verbinden mit Port 22, um meine Ansible Aufgaben zu laufen?

Antwort

2

Sie können meine ssh_pkn Verbindung Plugin ausprobieren.

# Example host definition: 
# [pkn] 
# myserver ansible_host=my.server.at.example.com 
# [pkn:vars] 
# ansible_connection=ssh_pkn 
# knock_ports=[8000,9000] 
# knock_delay=2 
+0

Danke für das Plugin - es funktioniert super! Ich habe bemerkt, dass Ansible scheint, SSH (und Port klopfen mit diesem Plugin) für jede einzelne Aufgabe wieder zu verbinden. Klingt das richtig? In diesem Fall verlangsamt das Plugin die Ausführung des Playbooks ein wenig, wenn ich wirklich nur am Anfang des Playbooks klopfen muss. Einmal geklopft, wird die Client-IP für X Minuten auf die weiße Liste gesetzt. Wäre es möglich, das Plug-In zuerst Port 22 wie üblich zu versuchen, dann nach X Timeout, Port klopfen stattdessen? Oder gibt es einen anderen einfacheren Weg, dies zu erreichen, den ich nicht in Betracht ziehe? – Justin

+0

Wenn die Verbindung tatsächlich geschlossen ist, wird sie von Anfang an mit Port-Klopfen initialisiert; Aber wenn es wiederverwendbar ist (wie Control-Master), wird das Port-Klopfen nicht bei jeder Aufgabe (nur bei der ersten) durchgeführt. –

1

Hier ist ein Brute-Force-Beispiel. Die Timeouts werden getroffen, sodass pro Spiel 2 Sekunden pro Host hinzugefügt werden.

- hosts: all 
    connection: local 
    tasks: 
    - uri: 
     url: "http://{{ansible_host}}:9999" 
     timeout: 1 
    ignore_errors: yes 
    - uri: 
     url: "http://{{ansible_host}}:9000" 
     timeout: 1 
    ignore_errors: yes 
    - hosts: all 
    # your normal plays here 

Andere Möglichkeiten: Verwenden Sie telnet, put a wrapper around Ansible (obwohl es isn't recommended in Ansible2), eine Rolle machen und dann sind mit meta, ein benutzerdefiniertes Modul schreiben (und ziehen Sie das zurück in ansible selbst).

+0

Tolle Idee! Dies funktionierte für mich nach dem Ersetzen von ansible_host durch inventory_hostname – Justin

Verwandte Themen