我的服務器設置爲需要敲入端口以便爲端口22 SSH白名單IP。我已經找到了關於設置Ansible playbook來配置服務器端端口敲定的指南,但是不能在客戶端執行端口敲打。如何編寫帶端口敲擊的Ansible劇本
例如,如果我需要敲開端口9999,9000,然後連接到端口22以運行我的Ansible任務,那麼我的playbook和/或庫存文件會是什麼樣子?
我的服務器設置爲需要敲入端口以便爲端口22 SSH白名單IP。我已經找到了關於設置Ansible playbook來配置服務器端端口敲定的指南,但是不能在客戶端執行端口敲打。如何編寫帶端口敲擊的Ansible劇本
例如,如果我需要敲開端口9999,9000,然後連接到端口22以運行我的Ansible任務,那麼我的playbook和/或庫存文件會是什麼樣子?
你可以試試我的ssh_pkn連接插件。
# 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
這裏是一個蠻力的例子。超時將被擊中,所以這會爲每個主持人增加2秒的時間。
- 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
其他方法:使用telnet
,put a wrapper around Ansible(雖然它isn't recommended in Ansible2),使一個角色,然後用meta
包括編寫自定義模塊(拉那回Ansible本身)。
好主意!這替換anuru_host後inventory_hostname – Justin
感謝您的插件 - 它工作的很棒!我確實注意到Ansible似乎重新連接了SSH(和這個插件的端口敲擊)以用於每一個單獨的任務。這聽起來正確嗎? 在這種情況下,當我真的只需要在劇本的開頭敲打端口時,插件會減慢劇本的執行速度。一旦敲門,客戶端IP將在X分鐘內被列入白名單。 是否有可能讓插件像通常一樣先嚐試端口22,然後在X超時之後,端口敲掉了嗎?或者,有沒有另一個簡單的方法來實現這一點,我不考慮? – Justin
如果連接確實關閉,它將從頭開始敲入端口;但是如果它是可重用的(像控制主),每個任務都不會進行端口敲擊(只有第一個)。 –