/etc/ssh/sshd_config ファイルで許可されたグループ

/etc/ssh/sshd_config ファイルで許可されたグループ

wordで始まる行の末尾に、次のsedコマンドが追加されます。 my_unix_adminsAllowGroups

/bin/sed -i '/^AllowGroups / s/$/ my_unix_admins/' /etc/ssh/sshd_config

my_unix_adminsアイテムが重複しないように行にまだ存在しない場合は、追加したいと思います。

つまり、その行に存在しない場合にのみ確認して追加します。

どうすればいいですか?

答え1

1つの方法は、最初にAllowGroups行を一致させ、次に行に「my_unix_admins」が含まれていない場合は、すでに存在する行末置換を実行することです。

sed '/^AllowGroups/ { /my_unix_admins/ !s/$/ my_unix_admins/; }' /etc/ssh/sshd_config > /etc/ssh/sshd_config.new

これは以下を使用します。大きな括弧グループ "my_unix_admins" は AllowGroups 一致を検索します。ここでもう一つの重要な特徴は!裏返すs//交換機能の実行ただオンラインでいいえ以前の範囲(ここで/ my_unix_admins /パターン検索)を一致させます。

GNU sedを使用すると仮定してGNU sedオンラインマニュアルに接続しましたが、中かっことリバース機能は次のとおりです。POSIXで指定したがって、ローカルのマニュアルページを確認することもできます。元のコマンドのPOSIX以外の唯一の機能は、-iGNU sedでサポートされているオプションです。

私が想像できる唯一の極端なケースは、AllowGroups行に「astronomy_unix_admins」または「my_unix_admins_on_mars」というグループがある場合、単純な/my_unix_admins/パターンマッチングが間違って一致することです。潜在的な誤った一致を防ぐには、拡張正規表現(alternation |)に対して次のオプションを有効にしてGNU sedを使用し、次のものを-E使用できます。

sed -E '/^AllowGroups/ { / my_unix_admins( |$)/ !s/$/ my_unix_admins/; }' < /etc/ssh/sshd_config > /etc/ssh/sshd_config.new

2つの変更点は次のとおりです。

  • グループ名の前にスペースが必要です。リストの最初のグループ、またはリストの別の場所にある場合はtrue。
  • 末尾の空白(行の途中で誤った一致を防ぐ)または行末のマーク(これを行うと、グループが行の最後になる可能性があります)が必要です。

関連情報