Есть ли способ изменить значение «PermitRootLogin» /etc/ssh/sshd_config
с помощью одной команды в терминале?
Я хочу изменить значения этого файла, не открывая его, и изменить значение «PermitRootLogin» с «да» на «нет».
решение1
Это вполне возможно сделать с помощью sed
, сопоставив строку и изменив значение:
sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config
^PermitRootLogin
соответствует строке, начинающейся сPermitRootLogin
s/yes/no
изменяет значение опции с «да» на «нет»
решение2
Я хочу изменить значение «PermitRootLogin» с «да» на «нет».
В этом случае я бы использовал Perl (т. е. что-то, что работает с полями и может редактировать их на месте; Sed не справляется с первым пунктом, а AWK — со вторым):
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, которое равно «нет», на «да», выводим все в файл tmp и заменяем оригинал файлом tmp, используя mv
.
Помните, что право собственности на этот файл конфигурации принадлежит пользователю root, поэтому вам понадобится sudo
доступ (добавьте sudo
перед этим mv
)