В случае, если в вашей папке ~/.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.
Вариант с ~/.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-подключении на хост "ssh-161924.srv.hoster.ru" мы будем ходить с ключом ~/.ssh/own_id_rsa, так как именно он указан в опции IdentityFile. Теперь такие команды как 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
Полезные ссылки:
Комментарии 0