sed 또는 Perl을 사용하여 파일에서 이 문자열을 삭제하는 방법은 무엇입니까?

sed 또는 Perl을 사용하여 파일에서 이 문자열을 삭제하는 방법은 무엇입니까?

이 문자열을 삭제하고 싶습니다.

no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="echo '사용자 \"root\" 대신 \"centos\" 사용자로 로그인하십시오.';echo;sleep 10"

아래 파일에:

no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="echo '사용자 \"root\" 대신 \"centos\" 사용자로 로그인하십시오.';echo;sleep 10" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCV9sc7lTrpAJb1UARLmNA08XD8Dy0hGJiX1E5qYk8MkH36xbBtcO6xeuncFr619pu+R/08jkYn9GIXlgPzD9THUpEI+m/OSp5nVPgIamiN7LudOSks6 zwk9THkxeSmW95KNEHW5h8Y8MoB0wXzGdr0yiV32nLmvyG18JU6

답변1

파일은 authorized_keysSSH용 파일로, ~/.ssh/authorized_keys. 여기에는 여러 필드가 있으며 제거하려는 필드는 첫 번째 선택적 "옵션" 필드입니다.

두 번째 필드는 매뉴얼 에 따라 ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, ssh-ed25519또는 값 중 하나 ssh-dss를 갖는 "keytype" 필드입니다 .ssh-rsasshd

이 사실을 사용하여 옵션 필드를 제거할 수 있습니다.

sed -E 's/^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))/\1/' ~/.ssh/authorized_keys >~/.ssh/authorized_keys.new &&
mv ~/.ssh/authorized_keys.new ~/.ssh/authorized_keys &&
chmod go-rwx ~/.ssh/authorized_keys

sed -i ...또는 Unix에서 이것이 일반적으로 어떻게 작동하는지 알고 있다면 그 자리에서 파일을 변경하는 데 사용할 수 있습니다 ( -i플래그는 작동합니다)약간) 의 구현에 따라 다릅니다 sed.

편집 sed명령은 s/^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))/\1/확장 정규식과 일치 ^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))하고 일치하는 텍스트를 해당 줄에서 찾은 키 유형으로 바꿉니다. 표현식은 각 입력 줄의 시작 부분부터 유효한 키 유형 중 하나까지 일치합니다.

답변2

sed -i 's/your_string//g' filename

your_string에서 일부 구두점을 이스케이프해야 할 수도 있습니다.

관련 정보