Есть ли способ изменить значение «PermitRootLogin» в /etc/ssh/sshd_config с помощью одной команды в терминале?
Я хочу изменить значения этого файла, не открывая его, и изменить «PermitRootLogin» "от да до нет.
В этом случае я бы использовал Perl (т. е. что-то, что работает с полями и которое может редактировать на месте; Sed терпит неудачу при первом, а AWK не работает на втором):
[ f1]% 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
Вы можете изменить их с помощью sed, используйте опцию -i
sed -i -e 's/old/new/g' file
См. man sed для detials
http://www.grymoire.com/Unix/Sed .html
Если вы имеете в виду «без открытия файла в редакторе», это возможно.
Например, вы можете использовать sed для замены шаблонов регулярных выражений на фиксированные строки:
sed 's/REGEX-PATTERN/REPLACE-WITH-THIS-STRING/' /PATH/TO/FILE
Вышеприведенная команда будет печатать содержимое файла с помощью замещаемых строк. Он не будет выполнять замены, просто распечатайте «предварительный просмотр»! Чтобы на самом деле применить замены после их проверки, используйте флаг -i («заменить на месте»):
sed -i 's/REGEX-PATTERN/REPLACE-WITH-THIS-STRING/' /PATH/TO/FILE
Любая программа, которая каким-либо образом обрабатывает файлы, должна выдавать 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)
Вы можете использовать Vim в режиме Ex:
ex -sc '/^PermitRootLogin/s/yes/no/|x' /etc/ssh/sshd_config
s заменить x сохранить и закрыть