2017-09-09 12 views
1

私は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

あなたが持っているいくつかのオプション:sedを

  • lineinfileモジュール
  • replaceモジュールと

    このソリューションでは、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' 
    
    • \だ* - ゼロ以上ホワイトスペース(空白、タブなど)
    • \ 1マッチ - (。*)最初のグループにマッチしたものは何でもを
    • \ 2 - (。*)は、第2のグループにマッチしたものは何でも
  • +0

    完璧です。あなたはそれを打ち破るように頼むのがあまりありませんか? 私は '\ s'がホワイトラインで、'^'beginと' $ 'end ...を知っています。 正確にそれが両方で一致することを確かめますか? '='? – 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を使用することができます。 ansible変数に置き換えるあなたの/etc/csf/csf.confファイルのコピーを作成し、TCP_OUTライン用:

    TCP_OUT = {{ port_list }} 
    

    次にあなたがファイルに望むポートを変数に事前にリストを設定します。

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

    すべてのサーバが同じであれば完璧ですが、私がcPanelとDirectAdminサーバを持っていると言われています。 いくつかのプレイブックを持っていることに意味がありませんか? – Florius

    関連する問題