Git та SSH, який ключ використовується?


94

Скажімо, ваш .sshкаталог містить 30 ключів (15 приватних та 15 загальнодоступних).

Де в Git можна перевірити, який із них використовується для підключення до даного віддаленого сховища?


10
Той, хто проголосував за "закриття", це питання - безпосередньо пов'язане з програмуванням з тієї ж причини, що тут дозволені питання щодо GIT
Джеймс Райцев,

1
Можливо ... Це справді питання суперкористувача, тут справа не у git, а в платформі, на якій він працює. Ви не можете перевірити "у git" на наявність проблеми, оскільки git не хвилює, це стосується лише того, як ви використовуєте ssh і як його налаштовано. Чи використовуєте ви ssh-agent, будь-яку систему управління ключами, яку операційну систему ви використовуєте, яку версію тощо?
Arafangion

Відповіді:


68

Наступний запис у .ssh/configфайлі вирішує проблему

  host git.assembla.com
  user git
  identityfile ~/.ssh/whatever

Де ~/.ssh/whateverшлях до вашого приватного ключа

Крім того, користувача та хоста можна вибрати у

git push git@git.assembla.com:repo_name.git
         ^__ ^_______________
         user host

тож, якби я хотів використовувати інший ключ ssh для іншого хоста, я б просто повторив те ж саме після першого ?? Чи відноситься файл ідентифікатора до першого хосту перед ним?
MikeSchem

гаразд, так, здається, це так cyberciti.biz/faq/…
MikeSchem

68

Виконуючи ssh у багатослівному режимі, він також ssh -v user@hostнадрукує величезну кількість інформації про налагодження, яка також містить деталі щодо ключових файлів, які він намагається ввійти.

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 332
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

Тепер , якщо ви поєднуєте це з кроком 4 у власній Git і SSH сторінці довідки , ssh -vT git@github.comможе дати вам відповідь.

Примітка: Ви також можете використовувати -iперемикач, щоб повідомити ssh під час виконання команди, який файл ключів використовувати.


Дивіться також: stackoverflow.com/questions/18845799 / ...
Sharadh

1
Ви також можете зігріти стандартний вивід помилки команди ssh, щоб знайти такий файл ключа: ssh -vv user@host 2> >(grep Offering)- це полегшить роботу. Останній файл повинен бути відкритим ключем. Наприклад:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
Джанфранко П.

3
githubце не те саме, що git.
ForeverWintr

9

Якщо це не вказано в .ssh/configньому, використовуватиметься файл приватного ключа за замовчуванням.

Файл за замовчуванням ~/.ssh/id_rsaабо ~/.ssh/id_dsaабо в ~/.ssh/identityзалежності від версії протоколу.


Коли ключі додаються до відомих хостів?
mountainLion

6

Я б сказав, що найбільш практичним на мій смак буде:

GIT_SSH_COMMAND='ssh -v' git …

звичайно, залежно від обставин може бути корисно просто експортувати його до поточного середовища SHELL, щоб вам не довелося щоразу додавати його вручну. Тоді це було б так:

export GIT_SSH_COMMAND='ssh -v'
git …

- Як можна man gitприпустити, існує кілька змінних середовища, які можуть вплинути на діяльність Git із використанням SSH. Відповідно до man sshви можете отримати деяку інформацію про налагодження під час розгортання -vваріанту (не тільки, але також, перегляньте посібник, якщо вам цікаво більше).

який ключ використовується?

На виході ви побачите щось подібне…

debug1: Offering public key: …

... що є відповіддю на ваш qn.


1
ТАК. Це має бути прийнятою відповіддю. Для того, щоб змусити його працювати на вікнах CMD (тьху), використовуйте: set GIT_SSH_COMMAND=ssh -v. Це допомогло мені зрозуміти, що ssh-config Inlcude-Path має бути приблизно таким у вікнах: Include /C/Users/YourUserName.ssh/configдля створення ssh і, отже, git використовуйте конфігураційний файл, який потім використовує, наприклад, HOST *запис, щоб вказати файл ідентифікації, який використовує git / ssh.
icyerasor

5

Оскільки gitпросто використовує sshдля підключення, він буде використовувати будь-який ключ, який sshби використовувався для підключення до віддаленого хосту. Детальніше див. У ~/.ssh/configфайлі; hostблок використовує IdentityFileдирективу , щоб вказати закритий ключ для використання. Ця сторінка ssh_config(5)містить повну інформацію.


Хм .. файл не існує в моїй системі. Чи слід?
Джеймс Райцев,

1
@JAM Яку ОС ви використовуєте? Також іноді файл конфігурації знаходиться за адресою/etc/ssh/ssh_config

Я на MACOS. Знайдено, /etc/ssh_configщо видається файлом, повним коментованих записів
Джеймс Райцев,

@sarnold Ви можете створити ~/.ssh/configсебе.
xdazz

4

Це може бути супер перевагою, але після запуску ssh -vT git@github.comвін показав мені, що він перевіряє /root/.sshнаявність ключів, я очікував, що він перевірить мій домашній каталог, а потім зрозумів, що ввійшов у систему як root!


Цей прийом, серед іншого, такий самий sshспосіб допиту - це правильні рішення. Дякую.
Власне

1

На віддаленому сервері відредагуйте файл sshd_config і змініть LogLevel з INFO на VERBOSE та перезапустіть ssh.

Тепер ваш файл журналу буде містити відбиток ключа, який використовувався для автентифікації кожного користувача.

У Ubuntu ці файли:

/etc/ssh/sshd_config
/var/log/auth.log

але вони можуть відрізнятися в іншому дистрибутиві. Просто погугліть для їх розташування (наприклад, деякі використовують / var / log / secure).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.