본문으로 건너뛰기
AZ Tools

SSH 공개키 검사기

authorized_keys나 known_hosts에 이미 들어 있는 줄을 붙여 넣으면 그 안에 실제로 무엇이 들어 있는지 알려 줍니다. 키마다 알고리즘, 줄의 이름으로 추측한 값이 아니라 키 자료에서 직접 읽어 낸 실제 키 길이, 요즘 OpenSSH가 출력하는 형태의 SHA256 지문, 오래된 서버와 클라우드 콘솔이 아직 보여 주는 콜론 구분 MD5 지문, 그리고 붙어 있는 주석과 옵션을 표시합니다. 대개 그 파일을 연 이유가 여기서 해결됩니다. 이 여섯 개 중 어느 것이 잃어버린 노트북인지, 이 호스트 키가 문서에 공개된 지문과 맞는지 같은 것입니다. 또한 키 줄을 훑어봐서는 보이지 않는 문제도 잡아냅니다. 알고리즘 이름은 줄의 첫 단어와 base64 블롭 내부에 두 번 적히는데 서버가 실제로 대조하는 것은 뒤쪽뿐이라, 복사·붙여넣기로 이름만 바뀐 키는 겉보기에 멀쩡하면서 조용히 인증에 실패합니다. 알고리즘 이름과 어긋난 ECDSA 곡선명, base64로는 풀리지만 내부가 잘린 블롭, 2048비트 미만 RSA, 그리고 OpenSSH가 7.0에서 기본 비활성화하고 9.8에서 완전히 제거한 ssh-dss도 마찬가지입니다. 실수로 개인키를 붙여 넣으면 처리를 거부하고 그 사실을 알려 줍니다. 모든 처리는 브라우저 안에서 이루어지며 키는 전송되지 않습니다.

사용법

  1. 공개키 줄을 하나 이상 붙여 넣습니다. authorized_keys나 known_hosts 파일 전체를 넣어도 되고, #으로 시작하는 주석 줄은 건너뜁니다.
  2. 공개된 호스트 키 지문과 대조할 때는 SHA256 값을, 확인하려는 시스템이 아직 옛 형식을 출력한다면 MD5 값을 사용합니다.
  3. 키 길이와 알고리즘으로 교체할 항목을 찾습니다. ssh-dss 전부와 2048비트 미만 RSA가 대상입니다.
  4. 줄을 지우기 전에 주석과 옵션을 보고 각 키가 어느 장비의 것인지 확인합니다.
  5. 노란색으로 표시된 항목은 줄의 겉모습과 다르게 동작하는 키이므로, 신뢰하기 전에 경고를 읽으십시오.

자주 묻는 질문

ssh-keygen이 출력한 지문과 왜 다릅니까?
서로 다른 해시 형식을 비교하고 있을 가능성이 가장 큽니다. OpenSSH 6.8부터 기본값은 패딩을 뗀 base64로 표시하는 SHA256(SHA256:uNiVzt… 형태)이고, 그 이전에는 콜론으로 구분한 16진수 MD5였습니다. 완전히 같은 바이트에 대한 지문이라 어느 쪽이 더 정확한 것은 아니지만 생김새는 전혀 다릅니다. 이 도구는 두 형식을 모두 출력하므로 상대편이 보여 주는 쪽에 맞춰 비교하면 됩니다. 두 형식 모두 다르다면 키 자체가 다른 것입니다. 지문은 base64 블롭만을 대상으로 하므로 주석이나 옵션이 바뀌어도 지문은 달라지지 않습니다.
줄에 적힌 알고리즘과 키 안의 알고리즘은 무엇이 다릅니까?
OpenSSH 공개키 줄은 알고리즘 이름을 두 번 적습니다. 한 번은 첫 단어로, 또 한 번은 base64 블롭 안의 첫 길이 접두 필드로 적습니다. 키의 일부인 것은 블롭 안쪽뿐이고 첫 단어는 이름표에 지나지 않으며, 평소 작업 흐름에서 둘이 일치하는지 확인하는 곳은 없습니다. 그래서 손으로 편집했거나 두 키를 잘못 이어 붙인 줄은 ssh-rsa라고 적혀 있으면서 실제로는 Ed25519 키를 담고 있을 수 있습니다. 파일 안에서는 아주 평범해 보이는데 인증만 되지 않습니다. 이 도구는 둘을 비교해서 어긋날 때 알려 줍니다.
여기에 키를 붙여 넣어도 안전합니까?
공개키라면 안전합니다. 애초에 공개하라고 만든 것이고, 이 페이지는 그것을 어디로도 보내지 않습니다. 파싱과 두 해시 모두 브라우저 안에서 실행되며, 페이지를 연 다음 네트워크를 끊어 보면 그대로 동작하는 것으로 직접 확인할 수 있습니다. 개인키는 이야기가 다릅니다. 이 페이지를 포함해 어떤 웹 페이지에도 개인키를 붙여 넣지 마십시오. 입력이 PRIVATE KEY 헤더로 시작하면 이 도구는 조용히 파싱하는 대신 처리를 거부하고 그 사실을 표시합니다.
SSH 키는 몇 비트여야 합니까?
새로 만드는 키라면 보통 Ed25519를 권합니다. 256비트로 고정되어 있고 짧고 빠르며 잘못 설정할 매개변수가 없습니다. 오래된 서버 때문에 RSA가 필요하다면 2048비트가 현재의 하한선이고 4096비트가 흔한 선택입니다. 2048비트 미만은 최신 OpenSSH와 대부분의 인증기관이 거부합니다. 다만 RSA의 비트 수와 Ed25519의 비트 수는 서로 비교할 수 있는 값이 아닙니다. 재는 대상이 다르기 때문에 256비트 Ed25519 키는 대략 3072비트 RSA 키에 해당하는 강도입니다. Ed25519를 쓸 수 없는 환경이라면 nistp256 위의 ECDSA도 괜찮습니다.
ssh-dss 키가 잘 동작하는데 왜 경고가 뜹니까?
오래된 무언가가 아직 받아 주고 있기 때문에 동작하는 것입니다. OpenSSH의 DSA 키는 1024비트로 고정되어 있어 현재의 모든 권고치를 밑돌고, 구현 자체가 나쁜 난수에 유난히 취약합니다. 논스가 한 번만 반복되어도 개인키가 그대로 드러납니다. OpenSSH는 7.0에서 ssh-dss를 기본 비활성화했고 9.8에서는 코드를 아예 제거했으므로, 서버를 올리는 순간 아무 경고 없이 이 키를 받지 않게 됩니다. authorized_keys에 아직 이 종류의 키가 남아 있다면 업그레이드 이후가 아니라 이전에 교체해 두는 편이 낫습니다.
known_hosts 줄이나 인증서도 읽을 수 있습니까?
known_hosts 줄은 처리됩니다. 앞쪽의 호스트 패턴을 키의 일부로 오해하지 않고 분리하며, |1|로 시작하는 해시 항목과 @cert-authority, @revoked 같은 표시자도 포함합니다. authorized_keys의 옵션 문자열(command="…", no-pty, from="…")도 같은 방식으로 분리합니다. OpenSSH 인증서(*-cert-v01@openssh.com 종류)는 인식해서 지문을 계산하지만 본문은 해석하지 않으므로, 여기서 주체 이름이나 유효 기간을 볼 수는 없습니다.

관련 도구