Подтвердить что ты не робот

GIT выберите закрытый ключ для использования

У меня есть 2 Git сервера, которым требуется 2 разных SSH-ключа.

git clone [email protected]:blahblahblah использует ~/.ssh/id_rsa, но мне нужно указать, какой ключ использовать в зависимости от сервера, к которому я подключаюсь.

Какой параметр Git командной строки выполняет это задание? (Я запускаю Linux)

4b9b3361

Ответ 1

Если вы подключаетесь через SSH, то ключ будет управляться параметром SSH, а не параметром git.

SSH ищет в файле ~/.ssh/config параметры конфигурации. Измените этот файл и добавьте записи IdentityFile для двух серверов Git следующим образом:

Host server1.whatever.com
  IdentityFile /path/to/key_1
Host server2.whatever.com
  IdentityFile /path/to/key_2

В этой статье есть еще несколько деталей.

Ответ 2

Есть еще одна возможность. Что установить core.sshCommand, например

git config --local core.sshCommand "/usr/bin/ssh -i /home/me/.ssh/id_rsa_foo"

Существует один конкретный сценарий, когда эта стратегия особенно полезна: когда у вас есть несколько учетных записей на Github, все учетные записи ssh для Github называются [email protected] и он использует ключ ssh чтобы определить, какой вы пользователь Github. В этом случае ни .ssh/config ни ssh-agent будут делать то, что вы хотите.

Обновление - Вы не можете запустить вышеупомянутое, пока у вас нет локального репозитория, поэтому, если вы пытаетесь клонировать удаленный репозиторий, вам нужно будет указать ключ вручную согласно ответу Guss:

GIT_SSH_COMMAND="/usr/bin/ssh -i /home/me/.ssh/id_rsa_foo" git clone https://github.com/user/repo

После того, как вы клонировали репозиторий, вы можете использовать команду git config для постоянной установки.

Ответ 3

Как правило, для этого вы хотите использовать ~/.ssh/config. Просто выполните парные адреса с ключами, которые вы хотите использовать для них, следующим образом:

Host github.com
  IdentityFile ~/.ssh/id_rsa.github
Host heroku.com
  IdentityFile ~/.ssh/id_rsa.heroku
Host *
  IdentityFile ~/.ssh/id_rsa

Host * обозначает любой сервер, поэтому я использую его для установки ~/.ssh/id_rsa в качестве используемого по умолчанию ключа.

Ответ 4

Используйте ssh-add path-to-private-key, он работает из коробки.

Ответ 5

В моем сценарии, аналогичном сценарию @Richard Smith (чье решение, BTW, у меня не сработало), мне нужно использовать разные ключи для одного и того же сервера в разных репозиториях.

Обходной путь для меня состоял в том, чтобы правильно настроить сеанс с переменной среды GIT_SSH_COMMAND, например так:

export GIT_SSH_COMMAND="ssh -o IdentitiesOnly=yes -i ~/.ssh/my-secret-identitiy"

Обновление:

Еще одна вещь, на которую следует обратить внимание, это то, что правильная установка переменной среды может быть довольно сложной задачей, поэтому я использую средства изменения командной строки, предоставляемые такими вещами, как Liquid Prompt или Fish Shell, чтобы подключиться к оболочке и постоянно обновлять переменные среды в соответствии с текущий каталог и некоторые правила. Например, все мои личные проекты, которым нужен мой личный ключ SSH с Gitlab, находятся в ~/Documents/Projects/personal поэтому, когда перехватчик оболочки запускает pwd и обнаруживает, что текущий каталог находится по этому пути, он автоматически устанавливает переменные GIT_SSH_COMMAND как необходимо.

Ответ 6

впервые (клон) вы можете установить --global, после клонирования вы можете установить --global или --local, если ключ для проекта, я бы выбрал --local

git config --local --add core.sshCommand 'ssh -i ~/.ssh/my_key'

Ответ 7

Пользователь Windows, я только что столкнулся с этой проблемой, и у меня есть немного другое решение, чем я читал здесь до сих пор. Проблема, с которой я столкнулся, заключается в том, что я просто хотел клонировать репозиторий, используя определенный закрытый ключ ssh, и не должен был глобально настраивать мой git config или добавлять определенные параметры git bash, как я делаю свою работу в PowerShell. По сути, я просто хочу иметь несколько закрытых ключей в своей папке .ssh и ссылаться на них в определенных репозиториях по мере необходимости.

Следующая команда работает для этого:

git clone -c core.sshCommand="ssh -i ~/.ssh/<PRIVATE KEY NAME>" <CLONE URL>

По сути, при инициализации git-репозитория он устанавливает параметр core.sshCommand перед запуском клона. Таким образом, конкретный ключ ssh, который вы хотите использовать для этого репо, установлен ТОЛЬКО для этого репо. Это может быть не идеальное решение для всех случаев, но для того, что я хочу.