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 06
хорошо, да, похоже, что это так cyberciti.biz/faq/…
MikeSchem 06
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 06
1
Вы также можете использовать grep для стандартного вывода ошибок команды 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: …

… Что является ответом на ваш вопрос.

Poige
источник
1
ДА. Это должен быть принятый ответ. Для того, чтобы заставить его работать на окнах CMD (тьфу), используйте: set GIT_SSH_COMMAND=ssh -v. Это помогло мне понять, что ssh-config Inlcude-Path должен выглядеть примерно так в Windows: Include /C/Users/YourUserName.ssh/configчтобы сделать ssh и, таким образом, git использовать файл конфигурации, который затем использует, например, HOST *запись для указания файла идентификации, который использует git / ssh.
icyerasor
5

Поскольку gitиспользуется только sshдля подключения, он будет использовать любой ключ, который sshбудет использоваться для подключения к удаленному хосту. Подробности смотрите в ~/.ssh/configфайле; hostблок использует IdentityFileдирективу , чтобы указать закрытый ключ для использования. На ssh_config(5)странице руководства содержится полная информация.

Сарнольд
источник
Хм .. файл не существует в моей системе. Должен ли он?
James Raitsev
1
@JAM Какую ОС вы используете? Кроме того, иногда файл конфигурации находится по адресу/etc/ssh/ssh_config
Я использую MACOS. Найден, /etc/ssh_configпо всей видимости, файл, полный прокомментированных записей
Джеймс Райцев
@sarnold Ты мог создать ~/.ssh/configсебя.
xdazz
4

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

Моак
источник
Этот метод, среди прочего, такой же sshспособ допроса является правильным решением. Спасибо.
eigenfield
1

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

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

В Ubuntu это следующие файлы:

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

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

Seumasmac
источник