web-dev-qa-db-ja.com

コメント、コメント解除、文字列に基づいて設定を変更、ターミナルから行を追加

行のコメントを外したり、その行の値を変更したり、行のコメントを外したりするには、いくつかのファイルを編集する必要があります。これをbashスクリプトで実行しようとしています。

/etc/ssh/sshd_configを編集して変更しようとしています

IgnoreRhosts yes
#RhostsRSAAuthentication no

IgnoreRhosts no
RhostsRSAAuthentication no

そして変化

#PermitRootLogin yes

PermitRootLogin no
AllowUsers mroberts

また、/etc/pam.d/system-authファイルを編集して、

password sufficient pam_unix.so try_first_pass use_authtok nullok md5

password sufficient pam_unix.so try_first_pass use_authtok nullok md5 shadow

また、次の行を/etc/pam.d/system-authファイルに追加する必要があります。

/etc/pam.d/system-auth file password required pam_unix.so remember=10

私はviを使用してこのすべてを手動で行っており、そのエディターで変更を加えることができます。ただし、この手順は多くのホストで実行する必要があり、一度に1つのホストでプロセスを繰り返すことはできません。 AllowUsers mrobertsを追加するのを忘れ、36時間近くホストからロックアウトされた場所でミスをしました。

行を検索してその一部を変更する方法はわかりませんが、行全体を変更する方法はわかりません。

ターミナルから、またはbashスクリプトを使用して、このような変更を行う方法はありますか?

5
edesz

一度に多くの変更を行う

  1. 元のファイルを取り、sshd_config.origとして保存します。

  2. sshd_configを思いのままに編集します。

  3. 走る

    diff sshd_config.orig sshd_config >config.patch
    

    config.patchファイルは安全な場所に保管してください。

これで、sshd_configの新しい未編集バージョンがあり、同じ編集を適用したい場合は、次を実行します:

patch sshd_config /path/to/config.patch

これにより、同じ編集が新しいファイルに適用されるか、ユーザーの助けなしでは解決できない矛盾がある場合は警告が表示されます。

個々の変更を行う

Unixには、ファイルを変更するための強力なコマンドラインツールもあり、エディターは不要です。

sedを使用して、たとえば:

sed -i.bak 's/IgnoreRhosts yes/IgnoreRhosts no/' sshd_config

または、GNU awkで同じ変更を実行します。

gawk -i inplace '$1=="IgnoreRhosts" {$2="no"} 1' sshd_config

patchアプローチにより、一度に多くの変更を簡単に行うことができます。変更の数が少ない場合は、sedおよびawk Excel。 sedの詳細については、たとえば このチュートリアル を参照してください。 awkの詳細については、たとえば このチュートリアル を参照してください。

5
John1024