Как github использует SSH для обмена данными? - PullRequest
0 голосов
/ 17 марта 2019

Я понял только половину процесса аутентификации SSH:

  1. Я передаю свой открытый ключ A Github
  2. Github шифрует данные и отправляет их мне
  3. Я единственный, кто читает это, потому что у меня есть закрытый ключ A, Хорошо

Теперь, когда я нажимаю, у меня нет открытого ключа B Github, чтобы делать то же самое в противоположном направлении ... или он где-то хранится? Также, если это работает так, если кто-то хочет что-то отправить, ему просто нужно украсть открытый ключ B, «предоставленный / сохраненный в .git» Github, связанный с моей учетной записью, и отправить то, что мне не нужно

Я знаю, что что-то упустил, поэтому я надеюсь, что кто-то сможет объяснить это с более подробной информацией

Ответы [ 2 ]

2 голосов
/ 17 марта 2019

Теперь, когда я нажимаю, у меня нет открытого ключа B Github, чтобы сделать то же самое в противоположном направлении ... или он где-то хранится?

Github.com отправляет свой открытый ключ при установлении SSH-соединения. Если вы используете OpenSSH в какой-либо UNIX, он сохраняется в файле $HOME/.ssh/known_hosts. Фактически, он появляется при первом подключении к Github через SSH, когда вы отвечаете «да» на следующее приглашение:

Невозможно установить подлинность хоста github.com (140.82.118.3). Отпечаток ключа RSA - SHA256: nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Вы уверены, что хотите продолжить подключение (да / нет)?

Отвечая "да", вы говорите своему SSH-клиенту, что доверяете владельцу ключа, имеющего открытую часть с указанным хешем nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Это гарантирует, что вы подключены к настоящему github.com, а не к какому-либо мошеннику, который притворяется github.com. (Обратите внимание, что данный отпечаток совпадает с отпечатком на официальной странице справки github SSH .) В следующий раз, когда вы подключаетесь к хосту и получаете от него открытый ключ, OpenSSH будет перебирать записи в файле known_hosts, найдите соответствующий отпечаток и предположите, что хост является подлинным и больше не будет запрашивать вас.

Но это все, что касается аутентификации Github для вас, т.е. е. доверяете ли вы серверу или нет .

Теперь ко второй части, которая включает в себя подтверждение вашей подлинности на сервере :

Кроме того, если это работает так, если кто-то хочет что-то отправить, ему просто нужно украсть открытый ключ B, «предоставленный / сохраненный в .git» Github, связанный с моей учетной записью, и отправить то, что мне не нужно

Не так. Github позволяет делать любые вещи только владельцам закрытых ключей, публичные копии которых зарегистрированы на странице настроек вашего аккаунта. Кража открытого ключа не имеет смысла, так как это открытый , т.е. это не секрет.

Давайте представим, что кто-то знает открытый ключ для вашей учетной записи Github и пытается внести некоторые изменения в ваше репо. Он подключается к Github и отправляет на него ваш открытый ключ, чтобы Github полагал, что он общается с реальным владельцем аккаунта. Но чтобы убедиться в этом, Github ставит перед клиентом задачу расшифровки, которую может выполнить только владелец закрытого ключа. Поскольку только у вас есть закрытый ключ для вашей учетной записи, только вы можете нажать на свои репозитории от вашего имени. Вот почему вы должны тщательно хранить свои личные ключи.

0 голосов
/ 17 марта 2019

SSH-сервер (GitHub) знает, что единственный, кто может получить доступ к репо, - это тот, кто имеет закрытый ключ.И только те, кто имеет закрытый ключ, могут расшифровать его сообщения.

Таким образом, сервер использует его.Он генерирует случайное число, шифрует его открытым ключом и просит клиента прочитать его.Если он правильно читает, он должен иметь закрытый ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...