키 협상을 수행 할 때 ssh가 정확히 무엇을 보내나요?


10

ssh에 ID 파일을 명시 적으로 지정하는 경우 :

ssh -i ./id_rsa ...

ssh 디버그 추적에 다음 줄이 있습니다.

debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply

ssh-generated id_rsa에 공개 RSA 지수도 포함되어 있습니까? id_rsa형식에 "BEGIN PRIVATE KEY"블록이있는 개인 키가 포함되어 있기 때문에 "공개 키 제공"은 "공개 키를 서버에 전송"이외의 의미를 가져야합니다.

편집하다:

명확히하기 위해, "공개 키 제공"라인 뒤에서 정확히 무슨 일이 일어나고 있는지 알고 싶습니다. 클라이언트가 여러 키를 보유한 경우 모두 키를 하나씩 서버에 제공합니다.


이 문제를 추가하기 위해 서버가 시도하기 전에 좋은 키를 얻었는지 확인하는 방법이 있습니다. 암호를 해독하기 전에 서버에서 키를 거부했기 때문에 이미 이름이 잘못되어 오류가 발생했습니다.
Gopoi

답변:


12

SSH 서버에 연결하고 공개 / 개인 키 쌍으로 인증하려면 먼저 공개 키를 서버와 공유해야합니다.

이이 서버에 사용자의 개인 키에 대한 공개 키를 복사하고에 추가하여 수행 ~/ssh/authorized_keys사본 중 / 복사, 붙여 넣기 id_rsa.pub~/.ssh/authorized_keys서버 또는 함께 cat id_rsa.pub >> ~/.ssh/authorized_keys목록에 추가.

연결하면 서버는 공개 키를 사용하여 챌린지에 서명하고 클라이언트는 개인 키 id_rsa를 사용하여 챌린지를 해독하고 서버의 공개로 다시 암호화하여 다시 host key보냅니다.

호스트는 개인 키로 응답을 해독하여 문제를 올바르게 해독했는지 확인하고 클라이언트 / 호스트는 공개 / 개인 키가 아닌 공유 데이터를 기반으로 암호화 된 연결을 설정합니다.

교환의 NO POINT는 개인 키이거나 호스트의 개인 키가 서로 교환되거나 공개 된 것입니다. 공개 키는 서버에 저장되어 있지만 이것이 공개 키이기 때문입니다.


그렇습니다.이 방법은 모두 훌륭하지만 서버가 챌린지를 암호화 할 공개 키를 식별 하기 전에 발생 합니다. 여러 개의 키가 있으며 모두 서버에 하나씩 "제공"됩니다. 정확히 무엇을 수반합니까? 그리고 네, 개인 키가 실제로 전송되지 않았다는 것을 알고 있습니다. 아마도 해당 행을 질문에서 제거해야합니다. : P
Alex B

지정 ssh -i keyname하면 서버에 연결하려는 ssh 클라이언트에게 정확히 WHICH 키를 알리는 것입니다. ~/.ssh/클라이언트에 12 개의 키가 있으면 각 키를 반복하지 않습니다. 그것은 찾을 것이다 ~/.ssh/id_rsa, ~/.ssh/id_dsa클라이언트에 코딩, 또는 어떤 키에 해당 호스트에 대해 지정된 잠재적으로 몇 가지 다른 파일 이름 ~/.ssh/config... 긴 이야기의 짧은; 클라이언트가 서버에 대한 키를 / offering /하지 않습니다.
cpbills

연결하면 / client /가 서버에서 인증 확인을 해독 한 다음 표준화 된 로컬 개인 키 목록으로 이동하여 인증 확인을 암호화하여 응답을 보냅니다. 챌린지 응답이 실패하면 다음 하드 코딩 된 키 이름으로 이동하고 / that / 개인 키로 다시 암호화 한 다음 다시 시도하십시오. 다시, 공개 및 개인 키는 로그인 인증시 서버와 / shared /가 아닙니다.
cpbills

1
오, 나는 당신의 의견을 다시 읽습니다. 호스트 :를 암호화가 호스트 키와 도전, 클라이언트 : 호스트 술집 키, 클라이언트와 도전을 해독 : 암호화하여 개인 키, 호스트와 도전 :에 나열된 모든 공개 키와 복호화 도전을 시도 ~/.ssh/authorized_keys호스트는 문제가 무엇인지 알고, 그리고 무엇을 찾고 공개 키가 잠금을 해제하면 해당 키를 사용하는 것입니다.
cpbills

@cpbills, 죄송합니다. 전달 된 에이전트의 키가 몇 개 있다는 점을 잊어 버렸습니다. 따라서 여러 키가 제공됩니다 (-vvv 로그는 ID 파일을 지정하더라도 제공되는 모든 키를 보여줍니다).
Alex B

1

공개 / 개인 키 암호화 는 매우 간단한 시스템을 기반으로합니다.

당신은 단방향 암호화를 수행 할 수있는 공개 키, 그리고 할 수있는 개인 키가 cryption을. 공개 키는 전 세계의 모든 사람에게 제공 될 수 있으며 개인 키로 해독 할 수있는 데이터를 암호화 할 수는 있지만 아무도 암호화 된 데이터를 해독 할 수 없습니다.

따라서 귀하의 질문에 대한 답변은 "귀하의 공개 키"입니다.


예, 감사합니다. 공개 키 암호화의 작동 방식을 자세히 알고 있지만 SSH 프로토콜의 세부 사항과 키 형식을 알고 싶습니다. 공개 키를 개인 키 파일에 저장하는지 여부에 관심이 있습니까? 내가 아는 한, "공개 키 제공"은 개인 키로 nonce에 서명하는 것을 의미하므로 서버가 해당 공개 키를 찾을 수 있습니다.
Alex B

예. 그것은 ssh-keygen을 수행한다 -y는 당신에게 개인 키의 공개 키를 줄 것이고, 반대로 작동하지 않는다
Mâtt Frëëman

1

현재로서는 공개 또는 개인 키를 보내야한다고 생각하지 않습니다. 서버에 이미 알려진 일반 텍스트의 개인 키를 사용하여 클라이언트가 암호화를 수행해야합니다. 호스트는 공개 키를 사용하여이 메시지를 해독 할 수 있으며,이를 올바르게 암호화 할 수있는 유일한 것은 해당 개인 키를 보유한 클라이언트이므로 클라이언트를 인증한다는 것을 알고 있습니다.

나는 그것이라고 생각 Offering public key: ./id_rsa이 (에 저장된 개인 키를 사용하기 때문에 ./id_rsa서버에 의해 알려진 후, 서버는 일반 텍스트와 일치하는지이 암호문 및 확인 암호를 해독하는 공개 키를 사용하는 일반 텍스트에 암호화를 수행하기를). 공개 키 파일 ./id_rsa.pub은 초기 키 생성 후 클라이언트에 필요하지 않아야합니다. 이것은 암호 해독을 위해 서버에서만 사용됩니다.


나는 이런 일이 일어나고 있다고 의심했지만 구체적인 내용 (예 : 실제 SSH 키 협상 프로토콜)을 원했습니다. 왜 다운 보트를 받았는지 잘 모르겠습니다.
Alex B

미안하지만 내 대답은 너무 손이 흔들렸다. SSH 키 협상의 세부 사항에 익숙하지 않으며 공개 키 인증에 필요한 일반적인 협상 만 알고 있습니다. 나는 비특이적 답변에 대해 투표권을 행사했을 수도 있습니다.
Trey Hunner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.