/etc/ssh/sshd_config 파일에 허용된 그룹

/etc/ssh/sshd_config 파일에 허용된 그룹

word 로 시작하는 줄 끝에 다음 sed명령이 추가됩니다 . my_unix_adminsAllowGroups

/bin/sed -i '/^AllowGroups / s/$/ my_unix_admins/' /etc/ssh/sshd_config

my_unix_admins항목이 중복되지 않도록 행에 아직 존재하지 않는 경우 추가하고 싶습니다 .

즉, 해당 행에 존재하지 않는 경우에만 확인하고 추가하십시오.

어떻게 해야 하나요?

답변1

한 가지 방법은 먼저 AllowGroups 줄을 일치시킨 다음 줄에 "my_unix_admins"가 포함되어 있지 않으면 이미 있는 줄 끝 대체를 수행하는 것입니다.

sed '/^AllowGroups/ { /my_unix_admins/ !s/$/ my_unix_admins/; }' /etc/ssh/sshd_config > /etc/ssh/sshd_config.new

이는 다음을 사용합니다.큰 괄호그룹 "my_unix_admins"는 AllowGroups 일치 항목을 검색합니다. 여기서 또 다른 중요한 특징은!뒤집다s// 교체 기능 실행오직온라인에서아니요이전 범위(여기서 /my_unix_admins/ 패턴 검색)를 일치시킵니다.

GNU sed를 사용한다고 가정하고 GNU sed 온라인 매뉴얼에 연결했지만 중괄호와 역방향 기능은 다음과 같습니다.POSIX에 의해 지정됨따라서 로컬 매뉴얼 페이지를 확인할 수도 있습니다. 원래 명령의 POSIX 이외의 유일한 기능은 -iGNU sed에서 지원하는 옵션입니다.

제가 상상할 수 있는 유일한 극단적인 경우는 AllowGroups 줄에 "astronomy_unix_admins" 또는 "my_unix_admins_on_mars"라는 그룹이 있는 경우 간단한 /my_unix_admins/ 패턴 일치가 잘못 일치하는 것입니다. 잠재적인 잘못된 일치를 방지하려면 확장 정규식( alternation |) 에 대해 다음 옵션을 활성화한 상태에서 GNU sed를 사용하고 -E다음을 사용할 수 있습니다.

sed -E '/^AllowGroups/ { / my_unix_admins( |$)/ !s/$/ my_unix_admins/; }' < /etc/ssh/sshd_config > /etc/ssh/sshd_config.new

두 가지 변경 사항은 다음과 같습니다.

  • 그룹 이름 앞에 공백이 필요합니다. 목록의 첫 번째 그룹이거나 목록의 다른 위치에 있는 경우 true입니다.
  • 후행 공백(줄 중간에서 잘못된 일치를 방지함) 또는 줄 끝 표시(이렇게 하면 그룹이 줄의 마지막이 될 수 있음)가 필요합니다.

관련 정보