sudoersファイルがあり、行末に/usr/sbin/ifconfigを追加しようとしています。だから私が達成したいのは次のとおりです。
devops ALL=(root) NOPASSWD: /usr/sbin/ifconfig, /usr/sbin/ethtool, /usr/sbin/hwclock
私は実行しようとしています:
echo "/usr/sbin/ifconfig" | ssh $i "tee -a /etc/sudoers.d/dev_ops"
しかし、他の行だけが生成されますが、重複行は必要ありません。
答え1
devopsへのNOPASSWDアクセスを提供する行があるかどうかを確認するには、/etc/sudoers.d/dev_ops
次の点を考慮してください。/usr/sbin/ifconfig
grep -q '^devops.*NOPASSWD:.*/usr/sbin/ifconfig' /etc/sudoers.d/dev_ops ||
ed -s /etc/sudoers.d/dev_ops <<< $'/^devops.*NOPASSWD:/ s!$!, /usr/sbin/ifconfig!\nw\nq'
目的は、「devops」で始まり、「NOPASSWD:」文字列と「/usr/sbin/ifconfig」文字列が同じ行のどこかに含まれる文字列を見つけることです。文字列がそうであればいいえファイルにある場合は、ed
「devops」で始まり、その後に文字列「NOPASSWD:」が続く(仮定)行を見つけ、その行の終わりを「、/usr/sbin/に置き換えます。ifconfig」と入力して保存して終了します。 。/etc/sudoers.d/dev_ops
正規表現 "^devops.*NOPASSWD:" と一致する行がない場合、この操作は失敗します。 - ?
from を受け取り、ed
変更は適用されません。