設定ファイルの特定のパラメータを自動化しようとしています/etc/ssh/sshd_config
。特に
#PermitRootLogin yes
そして
#LoginGraceTime 2m
読むべき内容:
PermitRootLogin no
LoginGraceTime 60
私はスクリプトの専門家ではありませんのでご了承ください。
スクロールを開始しようとしましたが、sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config
奇妙な結果が出ました。ただ私が処理したいファイルが表示されます...
誰かがsedを自分で使うように言うことができますか?
答え1
出力を一時ファイルにリダイレクトし、一時ファイルの名前を元のファイルに変更します。
sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv -f /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config
または、GNUがある場合は、内部編集オプションをsed
使用できます。-i
sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config
答え2
@Bodoの答えと似ていますが、この解決策は元の行を変更せずに修正されたバージョンを元の行の下に追加します。これは、元の行をコメントアウトしたい場合にのみ意味があります。
sed -i'' -n 'p;s/#\(LoginGraceTime\) 2m/\1 60/p;s/#\(PermitRootLogin\) yes/\1 no/p' /etc/ssh/sshd_config
\(...\)
ここでは、代替アイテムで置き換えられるキャプチャグループを使用します\1
(同じ文字列を再入力するには怠惰すぎるため)。
オプションのsedは-n
明示的に印刷された行のみを出力するため、最初のコマンドは変更されてp
いない行を印刷し、次の2つのコマンドは変更された行を印刷します。