/etc/ssh/sshd_config
ターミナルで 1 つのコマンドを使用して「PermitRootLogin」の値を変更する方法はありますか?
このファイルを開かずに値を変更し、「PermitRootLogin」の値を yes から no に変更します。
答え1
を使ってsed
、行に一致させて値を変更すれば、完全に可能です。
sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config
^PermitRootLogin
で始まる行に一致しますPermitRootLogin
s/yes/no
オプションの値を「はい」から「いいえ」に変更します
答え2
「PermitRootLogin」の値を「yes」から「no」に変更します。
この場合、私は Perl を使用します (つまり、フィールドを操作し、その場で編集できるもの。Sed は最初の 1 つで失敗し、AWK は 2 番目の 1 つで失敗します)。
sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
% grep ^PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin without-password
% sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
[sudo] password for user:
% grep ^PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin no
答え3
sedで変更するには、-iオプションを使用します。
sed -i -e 's/old/new/g' file
詳細はman sedを参照
答え4
open()
ファイルを何らかの方法で扱うプログラムは、システムコールを発行する必要がありますread()
。これは、で確認できますstrace
。これらのシステムコールなしでファイルを開くことは不可能です。
あなたの質問は、テキスト エディタなしでファイルを編集できるかどうかを尋ねているようです。他の人が示しているように、それは可能です。ここでの私の小さな貢献は次のとおりです。
awk '/^PermitRootLogin/{$2="yes"}1' /etc/ssh/sshd_config > /tmp/sshd_config && mv /tmp/sshd_config /etc/ssh/sshd_config
基本的に AWK では、適切な行を見つけて、フィールド 2 (「no」) を「yes」に置き換え、すべてを tmp ファイルに出力し、を使用して元の行を tmp ファイルに置き換えますmv
。
その設定ファイルの所有権はルートに属しているので、sudo
アクセス権が必要になります(sudo
前に追加してくださいmv
)