Сказать git какой из ssh-ключей использовать

В случае, если в вашей папке ~/.ssh (или другой) лежит более одной пары ключей, может понадобится использовать тот или другой ключ в зависимости от того, к какому ресурсу мы хотим конектиться. Как сгенерировать ssh ключи.

Например, при выполнении команды:

git push

По умолчанию используется ключ ~/.ssh/id_rsa. 

Permission denied (publickey)
fatal: Could not read from remote repository

Давайте разберемся как заставить git использовать тот или иной ключ.

Путь к нужному приватному ключу можно передать используя ENV переменную GIT_SSH_COMMAND.

Вариант с Environment Variable GIT_SSH_COMMAND

GIT_SSH_COMMAND='ssh -i ~/.ssh/own_id_rsa' git push

Таким образом команда git push будет использовать ключ, указанный в ssh -i в env переменной GIT_SSH_COMMAND.

Плюс этого подхода, что легко можем указать любой ключ для git.

git ssh ключ

Вариант с ~/.ssh/config

Предположим, что в bitbucket мы ходим с одним ключем, а в github хотим ходить с другим. Мы можем добавить такую конфигурацию в файл ~/.ssh/config:

Host github github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/own_id_rsa

В опции IdentityFile укажем путь к ключу, с которым хотим ходить в github. Теперь можно клонировать репозиторий из github без проблем и git push в него и тд.:

  • git clone git@github.com:username/reponame.git
  • git push

Нужный identity будет использоваться автоматически, так как прописан в ~/.ssh/config файле.

Как указать ключ в ssh подключении

Предпосылки:

у нас есть пара ключей:

  • ~/.ssh/id_rsa
  • ~/.ssh/own_id_rsa

Предположим, что для подключения по ssh мы пользуемся командой:

ssh srv161924@ssh-161924.srv.hoster.ru

И, теперь нам нужно подключаться используя ключ с именем ~/.ssh/own_id_rsa.

В команде ssh есть опция -i (identity_file), куда можно указать нужный ключ. Пример:

ssh -i ~/.ssh/own_id_rsa srv161924@ssh-161924.srv.hoster.ru

Это будет работать, но каждый раз так писать долго. Мы можем настроить алиасы через ssh config ~/.ssh/config.

Правим файл ~/.ssh/config, добавляя следующие строки:

Host hosterRu ssh-161924.srv.hoster.ru
    HostName ssh-161924.srv.hoster.ru
    User srv161924
    IdentityFile ~/.ssh/own_id_rsa

Здесь мы указали, что на хост "ssh-161924.srv.hoster.ru" мы будем ходить с ключом который указан в опции IdentityFile, то есть ~/.ssh/own_id_rsa. Теперь такие команды как ssh или rsync к этому хосту смогут "подхватить" нужный ключ автоматически. По умолчанию, использовался бы ключ с именем ~/.ssh/id_rsa.

Теперь будет достаточно написать:

ssh srv161924@ssh-161924.srv.hoster.ru

И подключение будет осуществлятся с ключом указанным в секции IdentityFile файла ~/.ssh/config.

Так как мы написали в секции Host alias hosterRu и в секции User имя пользователя, то мы можем написать даже "просто" вот так:

ssh hosterRu

Фактически, эта команда под капотом выполнит следующее:

ssh -i ~/.ssh/own_id_rsa srv161924@ssh-161924.srv.hoster.ru

Полезные ссылки:

 
 
 
 

icon Комментарии 0

Ваш комментарий к статье.. (для авторизованных)

ctrl+enter

icon Вход в систему

зарегистрироваться