authorized_keys 파일에서 SSH 공개 키 스크립팅

authorized_keys 파일에서 SSH 공개 키 스크립팅

파일 ~/.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\|

텍스트 편집기를 사용하는 것이 더 쉽고 안전할 수 있습니다. :)

관련 정보