이것은 너무 단순해 보이고 눈에 띄게 분명한 것을 놓친 것 같지만 키 쌍을 생성하지 않고 SSH를 사용할 때 실제로 무슨 일이 일어나고 있습니까?
이 질문에 대한 변형이 요청되었습니다여기대답처럼 저는 키 쌍이 없으면 SSH가 비밀번호 인증으로 대체된다는 것을 항상 이해했습니다.
그러나, 그위키피디아 기사두 가지 사용 방법만 설명합니다. 둘 다 키 쌍을 포함하는 것으로 보입니다. 하나는 수동으로 생성되고 다른 하나는 자동으로 생성됩니다.
SSH를 사용하는 방법에는 여러 가지가 있습니다. 하나는 자동으로 생성된 공개-개인 키 쌍을 사용하여 네트워크 연결을 암호화한 다음 암호 인증을 사용하여 로그온하는 것입니다.
또 다른 방법은 수동으로 생성된 공개-개인 키 쌍을 사용하여 인증을 수행함으로써 사용자나 프로그램이 비밀번호를 지정하지 않고도 로그인할 수 있도록 하는 것입니다.
키 쌍 없이 보안되지 않은 서버에 대한 SSH 연결을 생성할 때 사용자 이름과 비밀번호를 묻는 메시지가 나타나면 셸에 액세스할 수 있습니다.
비밀번호 대체는 구현 세부사항이므로 위키에는 없나요? 제안된 대로 키 쌍이 자동으로 생성되었습니까? 그렇다면 공개 키는 어떻게 서버에 전달되었습니까? 아니면 비밀번호만으로 진행되나요?
비밀번호와 사용자 이름 조합만 사용하는 경우 데이터가 전혀 암호화됩니까? 그렇다면 어떻게 암호화되고 있나요?
답변1
Wikipedia 기사는 다양한 SSHv2 계층을 혼동하고 있습니다. (그랬을지도.약간10년 전 SSHv1에서는 정확했지만 확실히 넌센스 수준으로 단순화되었습니다.)
귀하와 서버의 SSHv2 키 쌍은 다음 용도로 사용됩니다.입증오직, 암호화 설정은 항상 모든 연결에 대해 임시로 생성된 DH 키 쌍을 사용하여 수행됩니다. 서버의 SSH 키 쌍만표지판암호화 설정 데이터(서버의 신원을 증명하기 위해), 클라이언트의 SSH 키 쌍은 이 프로세스에 전혀 사용되지 않습니다.
SSHv2에서는 서버에 연결할 때(양쪽 끝에서 지원되는 알고리즘 목록을 교환한 후) 첫 번째 단계는 다음과 같습니다.키 교환, 이는 어떻게든 전체 연결을 암호화하는 데 사용되는 대칭 키를 생성합니다. (이 과정의 부작용으로 서버도 인증됩니다.)
대부분의 경우D~H또는ECDH이를 위해 사용됩니다. 즉, 다음을 의미합니다.
클라이언트는 DH 키 쌍(이 연결에만 사용됨)을 생성하고 DH 공개 키를 보냅니다.
서버는 또한 새로운 DH 키 쌍을 생성합니다. 또한 디스크에서 SSH "호스트 키" 키 쌍을 로드합니다.
그럼 그것표지판SSH 개인 키와 함께 DH 공개 키를 생성하고 두 공개 키(및 서명)를 클라이언트에 보냅니다.
클라이언트는 서명을 확인하고 서버의 SSH 공개 키가 Known_hosts에 있는지 확인합니다.
그런 다음 둘 다 사용합니다.DH키(클라이언트의 개인 + 서버의 공개)를 사용하여 공유 암호화 키를 생성하고 해당 DH 키 쌍을 버립니다.
또한 서버는 두 DH 키(서버의 개인 + 클라이언트의 공개)를 사용하여 동일한 공유 암호화 키를 생성하고 DH 키 쌍도 폐기합니다.
양쪽 모두 암호화를 활성화합니다.
(다른 키 교환 방법도 있지만 거의 사용되지 않습니다.)
다음 단계는클라이언트 인증. 이 시점에서는 클라이언트의 SSH 키가 아직 사용되지 않았더라도 연결이 이미 암호화되어 있습니다.
클라이언트는 클라이언트 인증을 위해 "서비스 요청"을 보냅니다.
서버는 "비밀번호", "공개 키" 등 몇 가지 메커니즘을 제공합니다.
SSH 키 쌍이 있는 경우 클라이언트는 "공개 키"를 선택하고 SSH 공개 키를 보낸 다음 SSH 개인 키를 사용하여 서버에서 제공하는 임의의 데이터에 서명하여 키 소유권을 증명합니다.
SSH 키 쌍이 없는 경우 클라이언트는 "비밀번호"를 선택하고 비밀번호를 직접 보냅니다. 하지만 여전히 암호화된 터널 내에 있습니다.