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


20

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있습니까?


왜 유스 케이스에 안전하지 않습니까?
quadruplebucky

StrictHostKeyChecking=noMITM에 취약합니다. 가 ssh-keyscan보안에 대한의 MITM은?
Roger Lipscombe 2016 년

나는 내가 다운로드하고 실행하려고하는 코드를 작성하기에 충분히 신뢰하는 적이없는 낯선 사람을 사칭하는 것에 대해 지나치게 걱정하는 이유를 이해하지 못한다 ...
quadruplebucky

이 때문에 GitHub의에 개인의 repo 소스 코드, 그리고 내가 커밋을 누르면 악성 변화를 소개하는 MITM (예)를 원하지 않는다. 한 가지 예일 뿐입니다 .
Roger Lipscombe

나는 (더 나은 또는 나쁜) github을 신뢰하기로 선택합니다. 나는 나와 그들 사이의 모든 임의의 네트워크 링크를 신뢰하도록 선택하지 않습니다.
Roger Lipscombe

답변:


11

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


17

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

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

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

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

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


1
해시 / 해시의 차이점은 무엇입니까? 이 컨텍스트에서 해싱이 적용되는 이유가 아니라 해싱이 무엇인지 알고 있습니다.
Glen Thomas

3
항목을 해싱하면 연결하는 데 사용되는 호스트에 대한 정보를 숨길 수 있습니다. security.stackexchange.com/questions/56268/…
Wee

4
이것은 질문에 대답하지 않습니다. ssh-keyscan을 사용하면 중간 공격이 발생할 수 있습니다. 이는 사용자가 저장 한 키가 시스템을 침입하려는 공격자의 키일 수 있음을 의미합니다. 물건을 확인하는 방법에 대한 내 대답을 참조하십시오.
Michael

Att. 답이 틀린 답변에 대한 관심 얻기 - "두 가지 최고의 답변은 실제로 안전하지 않습니다"
Peter Mortensen 2016 년

6

가장 쉬운 방법은를 사용하여 키를 수동으로 가져 와서 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)

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


나는 당신이 말한 것처럼 키를 가지고 있습니다. 어떻게 '내 스크립트에 키를 추가합니까?'
Glen Thomas

별도의 파일 또는 스크립트의 문자열로 사용하십시오.
Jakuje 2019

이 답변은 "수동으로 확인"에 숨겨져있어 매우 어려운 과정이므로 위험합니다. 그 방법을 설명하고 결과를 안전하게 사용하려고 시도하는 답변을 아래에 추가했습니다.
Michael

Att. 답이 틀린 답변에 대한 관심 얻기 - "두 가지 최고의 답변은 실제로 안전하지 않습니다"
Peter Mortensen 2016 년

1
@RogerLipscombe 나는 대답이 안전하게 해석 될 수 있음에 동의합니다. "수동으로 확인하십시오"는 설명되지 않지만 "ssh 매뉴얼 페이지의 지침을 따르십시오"라는 의미로 이해하면 괜찮을 것입니다. 여기서 위험은 누군가가이를 이해하지 못하고 예를 들어 서버에 로그인 한 후 키 확인과 같은 안전하지 않은 것을 시도 할 수 있다는 것입니다. 그렇기 때문에이 답변을 "위험한"것과 다른 하나는 "안전하지 않은"것으로 불렀습니다. 수동으로 확인하는 방법에 대한 자세한 내용은 중요한 부분입니다. 받아 줘서 고마워.
Michael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.