/etc/ssh/sshd_config
터미널에서 하나의 명령을 통해 "PermitRootLogin"의 값을 변경할 수 있는 방법이 있습니까 ?
이 파일을 열지 않고 값을 변경하고 "PermitRootLogin" 값을 yes에서 no로 변경하고 싶습니다.
답변1
을 사용하여 sed
행을 일치시키고 값을 변경하는 것이 완벽하게 가능합니다.
sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config
^PermitRootLogin
다음으로 시작하는 줄과 일치합니다.PermitRootLogin
s/yes/no
옵션 값을 "yes"에서 "no"로 변경합니다.
답변2
"PermitRootLogin" 값을 yes에서 no로 변경하고 싶습니다.
이 경우에는 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를 사용하면 적절한 줄을 찾고 "no"인 필드 2를 "yes"로 바꾸고 모든 것을 tmp 파일로 출력하고 를 사용하여 원본을 tmp 파일로 바꿉니다 mv
.
해당 구성 파일의 소유권은 root 에 속하므로 액세스 권한이 필요합니다 sudo
( sudo
전에 추가 mv
).