구성 파일의 특정 매개변수를 자동화하려고 합니다 /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
명령은 수정되지 않은 행을 인쇄하고 다음 두 명령은 수정된 행을 인쇄합니다.