파일 ~/.ssh/authorized_keys
형식은 다음과 같이 간단히 요약할 수 있습니다.
- 키당 한 줄이 포함된 텍스트 파일입니다.
- 빈 줄과
#
octothorpe( )로 시작하는 줄은 무시됩니다. - 네 가지 필드가 있습니다.옵션,버튼 유형,열쇠그리고논평;
- 필드 1과 4는 선택 사항입니다.
- 큰따옴표를 사용하는 경우 필드 1에 공백이 포함될 수 있습니다.
- 네 번째 필드는 따옴표로 묶지 않고 공백을 포함할 수 있습니다.
전체 설명은 에 있습니다 man sshd
.
파일의 키를 bash
조작하는 안정적이고 스크립트 가능한(예: ) 방법이 있습니까 ?~/.ssh/authorized_keys
예를 들어 스크립트는 다음과 같습니다.
- 특정 키 추출(예:버튼 유형,열쇠그리고논평필드),
- 조작(추가, 수정 또는 삭제)옵션대지,
- 조작(추가, 수정 또는 삭제)논평대지,
- 모든 키를 반복하거나
- 키를 제거합니다.
ssh-keygen
파일(예 : ssh-add
&c.) 을 수정할 수 있는 SSH 도구가 없는 것으로 보이며 ~/.ssh.authorized_keys
파일의 특성옵션그리고논평sed
필드를 사용하면 일반적인 awk
또는 메소드를 사용하여 perl -pe
이를 안정적으로 달성하기가 어렵습니다 .
댓글 팔로우, 이것은 간단한 질문입니다. ~/.ssh/authorized_keys
파일을 읽고 모든 키를 출력하는 스크립트를 상상해보십시오. 키만 출력합니다. 옵션도 없고 공백이나 주석 줄도 없습니다.
각 줄이 공백으로 구분되어 있기 때문에 이 작업을 수행하는 데 문제가 있지만 다음과 같습니다.
- 옵션은 공백을 포함하거나 완전히 없을 수 있습니다.
- 공백으로 인해 주석은 0개 이상의 필드가 될 수 있습니다.
따라서 행에 포함된 필드 수를 알 수 없으며 해당 행에 필드가 몇 개 있는지 쉽게 알 수 없습니다.옵션기간.
이해하려면 지나치게 복잡한 정규식이 필요합니다.옵션필드를 사용하면 행의 나머지 부분이 출력되기 전에 안정적으로 제거할 수 있습니다. 나는 sed
이것을 and 로 시도했습니다 perl -pe
.
이런 종류의 스크립트에 대한 인위적인 사용 사례는 다음과 같습니다.모든 키의 지문 나열.
답변1
설명을 보면 옵션과 주석 줄을 제거하려는 것 같습니다. 에 따르면 man 8 sshd
:
공개 키는 공백으로 구분된 옵션, 키 유형, base64 인코딩 키, 주석 필드로 구성됩니다. 옵션 필드는 선택 사항입니다. 키 유형은 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'ssh-ed25519', 'ssh-dss' 또는 'ssh-rsa'입니다. 사용되지 않음 어떠한 목적으로도 사용되지 않음(단, 사용자가 키를 쉽게 식별할 수 있음)
그래서 당신은 이것을 할 수 있습니다 :
sed '
/^[ ]*$/d;
/^#/d;
s/^.* \(ecdsa-sha2-nistp256\|ecdsa-sha2-nistp384\|ecdsa-sha2-nistp521\|ssh-ed25519\|ssh-dss\|ssh-rsa\) /\1 /' \
~/.ssh/authorized_keys
이는 키 주석에 등이 포함되어 있지 않다고 가정합니다 ssh-dss
. ssh-rsa
또한 구현 에 대한 sed(1)
지원을 가정합니다 .OR
\|
텍스트 편집기를 사용하는 것이 더 쉽고 안전할 수 있습니다. :)