2017-09-09 114 views
1

我正在製作一個Ansible劇本來設置CSF。 除了最後一部分,我已經完成了一切。Ansible:替換文件中的單詞

我想在/etc/csf/csf.conf文件中禁用端口22。 因此TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995"需要22刪除。 我不想替換整條生產線,因爲一些生產線不同,有些生產商開放了端口2087,或者以2222爲例。 有沒有什麼辦法可以在22上過濾?

預先感謝您!

回答

3

您有幾種選擇:

此解決方案使用replace模塊查找以TCP_OUT =開頭的行,並用行,替換,22,

tasks: 
    - name: Strip port 22 
    replace: 
     dest: /etc/csf/csf.conf 
     regexp: '^TCP_OUT\s*=\s*(.*),22,(.*)$' 
     replace: 'TCP_OUT = \1,\2' 
  • \ S * - 匹配的零個或多個空格(空格,製表符等)
  • \ 1 - 無論在第一組中匹配
  • (*)。 \ 2 - (。*)不論在第二組匹配
+0

啊完美。你是否介意,如果沒有太多要求將其分解? 我知道'\ s'是一個白線,'''開始和'$'結束... 究竟是什麼確保它匹配在兩個,而不是? '='? – Florius

+0

@Florius看到我的更新回答。 – helloV

1

代碼工作證明

>>> TCP_OUT = '20,21,22,25,53,80,110,113,443,587,993,995,2087,2222,22' 
>>> print(','.join([port for port in TCP_OUT.split(',') if port != '22'])) 
'20,21,25,53,80,110,113,443,587,993,995,2087,2222' 
+0

的默認配置是' 「20,21,22,25,53,80,110,113,443,587,993,995」',而是一個的cPanel服務器將有2087在裏面。 這樣做'你的方式'意味着我將不得不打開所有服務器上的端口2222和2087,非directadmin和cPanel服務器以及? – Florius

+0

哦,我看到了,我想我可以添加一些文件讀取代碼,也可以在包含字符串「TCP_OUT =」的行上進行替換。聽起來不錯? – KingMak

0

你可以使用template。製作副本的/etc/csf/csf.conf文件,爲TCP_OUT線與ansible變量替換:

TCP_OUT = {{ port_list }} 

然後與您在文件中想要的端口的可變提前設置列表。

vars: 
    port_list = "20,21,25,53,80,110,113,443,587,993,995" 
+0

如果所有的服務器都是一樣的,那就完美了,但是如前所述,我有cPanel和DirectAdmin服務器。 有幾個不同的劇本沒有多大意義? – Florius