Я пытаюсь автоматизировать настройку определенных параметров в моем /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
используется для печати немодифицированных строк, а следующие две команды — для печати измененных строк.