SSH known_hosts 파일에 호스트 (예 : GitHub)를 안전하게 추가 SSH known_hosts파일에 호스트

SSH known_hosts파일에 호스트 키를 안전하게 추가하려면 어떻게 해야합니까?

개발 머신을 설정하고 있는데, 예를 들어 git리포지토리가 github.comSSH 를 사용 하지 않도록 복제 할 때 메시지가 표시 되지 않도록하고 싶습니다 .

나는 사용할 수 있다는 것을 알고 있지만 StrictHostKeyChecking=no(예 : 이 답변 ) 안전하지 않습니다.

지금까지는 …

  1. GitHub는 SSH 키 지문을 https://help.github.com/articles/github-s-ssh-key-fingerprints/에 게시합니다.

  2. ssh-keyscan대한 호스트 키를 얻는 데 사용할 수 있습니다 github.com.

이 사실들을 어떻게 결합합니까? 미리 입력 된 지문 목록이 주어지면 파일 의 출력을 파일에 ssh-keyscan추가 할 수 있는지 어떻게 확인 known_hosts합니까?


나는 다음을 묻는 것 같아요.

에 의해 반환 된 키의 지문을 어떻게 얻 ssh-keyscan습니까?

SSH에 대해 이미 MITM을 사용 하고 있지만 유효한 인증서 체인이 있기 때문에 GitHub HTTPS 페이지를 신뢰할 수 있다고 가정합니다 .

즉, (의도 한) SSH 호스트 키 ( ssh-keyscan)와 일부 (신뢰할 수있는) 키 지문이 있습니다. 다른 것을 어떻게 확인합니까?


관련 : 출력의 호스트 부분을 어떻게 해시 ssh-keyscan합니까? 또는 해시 / 해시되지 않은 호스트를에 혼합 할 수 known_hosts있습니까?



답변

known_hosts파일에 키를 “안전하게”추가하는 가장 중요한 부분은 서버 관리자로부터 키 지문을 얻는 것입니다. 주요 지문은 다음과 같아야합니다.

2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

GitHub의 경우 일반적으로 관리자와 직접 대화 할 수 없습니다. 그러나 웹 페이지에 키를 배치하여 정보를 복구 할 수 있습니다.

수동 키 설치

1) 서버에서 키 사본을 가져 와서 지문을 얻습니다. 주의 : 지문을 확인 하기 전에이 작업을 수행하십시오.

$ ssh-keyscan -t rsa github.com | tee github-key-temp | ssh-keygen -lf -
# github.com:22 SSH-2.0-babeld-f3847d63
2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

2) 서버 관리자로부터 키 지문의 사본을 받으십시오.이 경우 github.com에 대한 정보가있는 페이지로 이동하십시오.

  1. github.com으로 이동
  2. 도움말 페이지로 이동합니다 (로그인 한 경우 오른쪽 메뉴, 그렇지 않으면 홈페이지 하단).
  3. 에서 시작 섹션으로 이동 SSH와 GitHub의에 연결
  4. SSH 연결 테스트로 이동
  5. 나중에 사용할 수 있도록 SHA256 지문을 해당 페이지에서 텍스트 편집기로 복사하십시오.

3) 두 소스의 키를 비교하십시오.

텍스트 편집기에서 바로 위에 배치하면 무언가가 변경되었는지 쉽게 확인할 수 있습니다.

2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA) #key recovered from github website
2048 SHA256:nThbg6kXUpJ3Gl7E1InsaspRomtxdcArLviKaEsTGY8 github.com (RSA) #key recovered with keyscan

두 번째 키는 조작되었지만 원래 키와 매우 비슷해 보입니다. 이와 같은 상황이 발생하면 심각한 공격을 받고 신뢰할 수있는 보안 전문가에게 문의해야합니다.

키가 다르면 절차가 중단되고 보안 전문가와 연락하십시오

4) 키가 올바르게 비교되면 이미 다운로드 한 키를 설치해야합니다

cat github-key-temp >> ~/.ssh/known_hosts

또는 시스템의 모든 사용자 (루트로)를 설치하려면 다음을 수행하십시오.

cat github-key-temp >> /etc/ssh/ssh_known_hosts

자동 키 설치

빌드 프로세스 중에 키를 추가해야하는 경우 위 수동 프로세스의 1-3 단계를 따라야합니다.

이를 수행 한 후 github-key-temp파일 의 내용을 검사하고 해당 내용을 알려진 호스트 파일에 추가하는 스크립트를 작성하십시오.

if ! grep github.com ~/.ssh/known_hosts > /dev/null
then
     echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" >> ~/.ssh/known_hosts
fi

이제 비활성화 된 모든 명령을 제거 해야합니다 .sshStrictHostKeyChecking


답변

known_hosts 파일에서 해시 / 해시되지 않은 항목을 혼합 할 수 있습니다.

따라서 github 키를 추가하려면 다음을 수행하십시오.

ssh-keyscan github.com >> ~/.ssh/known_hosts

해시하려면 -H를 추가하십시오.

ssh-keyscan -H github.com >> ~/.ssh/known_hosts


답변

가장 쉬운 방법은를 사용하여 키를 수동으로 가져 와서 ssh-keyscan수동으로 확인하는 것입니다.

$ ssh-keyscan -t rsa github.com | ssh-keygen -lf -
# github.com:22 SSH-2.0-libssh-0.7.0
2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

그리고 그것들을 스크립트에 추가하면 “권한있는”공개 키가 나옵니다.


답변