Скажімо, ваш .ssh
каталог містить 30 ключів (15 приватних та 15 загальнодоступних).
Де в Git можна перевірити, який із них використовується для підключення до даного віддаленого сховища?
Скажімо, ваш .ssh
каталог містить 30 ключів (15 приватних та 15 загальнодоступних).
Де в Git можна перевірити, який із них використовується для підключення до даного віддаленого сховища?
Відповіді:
Наступний запис у .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 у багатослівному режимі, він також 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 під час виконання команди, який файл ключів використовувати.
ssh -vv user@host 2> >(grep Offering)
- це полегшить роботу. Останній файл повинен бути відкритим ключем. Наприклад:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
github
це не те саме, що git
.
Якщо це не вказано в .ssh/config
ньому, використовуватиметься файл приватного ключа за замовчуванням.
Файл за замовчуванням ~/.ssh/id_rsa
або ~/.ssh/id_dsa
або в ~/.ssh/identity
залежності від версії протоколу.
Я б сказав, що найбільш практичним на мій смак буде:
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.
set GIT_SSH_COMMAND=ssh -v
. Це допомогло мені зрозуміти, що ssh-config Inlcude-Path має бути приблизно таким у вікнах: Include /C/Users/YourUserName.ssh/config
для створення ssh і, отже, git використовуйте конфігураційний файл, який потім використовує, наприклад, HOST *
запис, щоб вказати файл ідентифікації, який використовує git / ssh.
Оскільки git
просто використовує ssh
для підключення, він буде використовувати будь-який ключ, який ssh
би використовувався для підключення до віддаленого хосту. Детальніше див. У ~/.ssh/config
файлі; host
блок використовує IdentityFile
директиву , щоб вказати закритий ключ для використання. Ця сторінка ssh_config(5)
містить повну інформацію.
/etc/ssh/ssh_config
/etc/ssh_config
що видається файлом, повним коментованих записів
~/.ssh/config
себе.
Це може бути супер перевагою, але після запуску ssh -vT git@github.com
він показав мені, що він перевіряє /root/.ssh
наявність ключів, я очікував, що він перевірить мій домашній каталог, а потім зрозумів, що ввійшов у систему як root!
ssh
спосіб допиту - це правильні рішення. Дякую.
На віддаленому сервері відредагуйте файл sshd_config і змініть LogLevel з INFO на VERBOSE та перезапустіть ssh.
Тепер ваш файл журналу буде містити відбиток ключа, який використовувався для автентифікації кожного користувача.
У Ubuntu ці файли:
/etc/ssh/sshd_config
/var/log/auth.log
але вони можуть відрізнятися в іншому дистрибутиві. Просто погугліть для їх розташування (наприклад, деякі використовують / var / log / secure).