Лучший способ использовать несколько закрытых ключей SSH на одном клиенте

Я хочу использовать несколько закрытых ключей для подключения к разным серверам или разным частям одного и того же сервера (я использую системное администрирование сервера, администрирование Git и обычное использование Git на одном сервере). Я пытался просто складывать ключи в файлы id_rsa безрезультатно.

По-видимому, простой способ сделать это — использовать команду

ssh -i <key location> [email protected] 

Это довольно громоздко.

Любые предложения относительно того, как сделать это немного проще?


person Justin    schedule 10.03.2010    source источник
comment
Я написал эту статью, в которой подробно рассматриваются различные конфигурации, их преимущества и недостатки. .   -  person Raffi    schedule 02.05.2020


Ответы (21)


Из моего .ssh/config:

Host myshortname realname.example.com
    HostName realname.example.com
    IdentityFile ~/.ssh/realname_rsa # private key for realname
    User remoteusername

Host myother realname2.example.org
    HostName realname2.example.org
    IdentityFile ~/.ssh/realname2_rsa  # different private key for realname2
    User remoteusername

Затем вы можете использовать следующее для подключения:

ssh myshortname

ssh myother

И так далее.

person Randal Schwartz    schedule 10.03.2010
comment
Спасибо Рэндал! Я немного покопался в .ssh/config и нашел это: github.com/guides/multiple- github-accounts указал мне правильное направление. - person Justin; 10.03.2010
comment
Это очень помогло (в дополнение к stackoverflow.com/a/3828682/169153). Если вы хотите использовать ключи шпатлевки, следуйте этому документу здесь: blog.padraigkitterick.com/2007/09/16/ - person Urda; 15.03.2012
comment
Я нашел этот пост очень полезным. Одна ошибка, которую я сделал при создании файла конфигурации, заключалась в том, что я поместил файл .txt в папку .ssh вместо запуска команды touch для создания файла конфигурации. - person M_x_r; 22.12.2012
comment
есть ли другие способы? Как переменная окружения? - person Jürgen Paul; 23.07.2013
comment
отличный ответ .. один комментарий, по крайней мере, в моем случае --- закрытые ключи должны быть в разных папках. Точно не знаю, почему, но это единственный способ, которым это работает - person user1236048; 04.09.2013
comment
Обратите внимание, что вы также можете указать несколько записей IdentityFile для одного и того же Host, которые затем проверяются по порядку при подключении. - person sschuberth; 02.10.2013
comment
Добавление комментария # private key for realname может вызвать ошибку garbage at end of line; "#". - person Karl Richter; 18.05.2015
comment
Это видео с практическими рекомендациями на YouTube прекрасно перекликается с ответом @RandalSchwartz и дает более полное представление о WSGWYG его ответу: youtube. com/watch?v=9u4QPEMFK4A - person Vietnhi Phuvan; 03.08.2015
comment
Это избавило меня от множества хлопот на моем компьютере с Windows. Спасибо! ssh-агент может сосать это - person Derek; 23.08.2015
comment
Если вы работаете в Windows, и ваш ssh-клиент игнорирует ваш файл .ssh/config, см. этот ответ: stackoverflow.com/questions/9513712/ - person Zachary Yates; 28.08.2015
comment
Используйте IdentitiesOnly yes для предотвращения ~/.ssh/id_rsa или любых других идентификаторов. (Изначально это было редактирование) - person user3338098; 02.11.2015
comment
И (просто для сравнения, как для/из github выше) здесь также подтверждается, согласно Bitbucket - person Frank Nocke; 11.04.2018
comment
Стоит понять, откуда берется этот ~/ssh/config материал - person Frank Nocke; 11.04.2018
comment
Обратите внимание: если вы используете ssh-агент для хранения ключей, IdentityFile в вашей конфигурации может указывать на файл открытого ключа. Таким образом, ssh может увидеть, что файл, упомянутый в конфигурации, уже присутствует в агенте, чего он не смог бы сделать, если бы ключ был закрытым (при условии, что у вас есть фраза-пароль на вашем закрытом ключе). - person Brian Minton; 20.08.2018
comment
Подхватывается ли каким-либо образом этот конфигурационный файл утилитой ssh? Это значение по умолчанию, которое он ищет? - person MadPhysicist; 21.02.2019
comment
Потрясающе, спасибо! Обратите внимание, что вы также можете использовать это, если вы когда-либо используете одно и то же соединение... Это избавляет вас от необходимости вводить пользователя каждый раз - person Tobias Feil; 04.02.2020
comment
В соответствии с вопросом о сбое сервера и комментарий здесь на самом деле это не остановит вас от предложения неправильного идентификатора на github, и вам также нужно IdentitiesOnly yes в принципе. (На самом деле последний у меня тоже не работает) - person dan mackinlay; 11.05.2020

Вы можете указать ssh последовательно пробовать несколько ключей при подключении. Вот как:

$ cat ~/.ssh/config
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_old
IdentityFile ~/.ssh/id_ed25519
# ... and so on

$ ssh server.example.com -v
....
debug1: Next authentication method: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa_old
debug1: read PEM private key done: type RSA
....
[server ~]$

Таким образом, вам не нужно указывать, какой ключ работает с каким сервером. Он просто использует первый рабочий ключ.

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

Конечно, это не превосходит конфигурацию для каждого сервера, как в других ответах, но, по крайней мере, вам не придется добавлять конфигурацию для всех и каждого сервера, к которому вы подключаетесь!

person spacesix    schedule 20.10.2015
comment
Это фантастическое решение для заданного вопроса, но оно не совсем отвечает потребностям, которые предполагал задающий вопрос. Для меня это было именно то решение, которое полностью удовлетворяет потребность в наилучшем способе использования нескольких закрытых ключей SSH на одном клиенте. - person Wade; 08.08.2016
comment
Похоже, это не работает в объявлении хоста в файле конфигурации. - person Maksim Luzik; 12.04.2017
comment
Это не очень хорошо работает с git, так как если у вас есть два ключа развертывания github, первый в списке действителен и будет работать, но тогда github будет жаловаться, что репозиторий не соответствует. - person Adam Reis; 12.09.2017
comment
Это более динамичный подход, отлично работает в определенных ситуациях. Спасибо за это - person gbolo; 25.10.2018
comment
Если на SFTP/целевом сервере есть политики безопасности, которые блокируют учетную запись (скажем, после трех неудачных попыток подключения), не приведет ли это к блокировке учетной записи. Попытка подключения, но с файлом «неверный ключ» - person alchemist.gamma; 02.11.2018
comment
Имейте в виду, если у вас есть что-то вроде fail2ban на этих серверах. Вы можете оказаться в одной из этих тюрем... из-за неудачных попыток, сгенерированных другими ключами... - person Piccolo; 18.04.2019
comment
Идеально, это было именно то, что я искал. Отныне мои рабочие станции будут выглядеть так. IdentityFile ~/.ssh/id_rsa_shared_nopass , IdentityFile ~/.ssh/id_rsa_shared , IdentityFile ~/.ssh/id_rsa_local_nopass , IdentityFile ~/.ssh/id_rsa_local Где локальные общие ресурсы совместно используются разными рабочими станциями, которые я использую для доступа, например, к настенным панелям и т. д. , в то время как локальный я привязан к определенной рабочей станции. _nopass будет независимо от того, требует пароль или нет. Лишь бы была лестница безопасности. - person Griffin; 27.09.2019
comment
@AdamReis Для git вместо этого можно использовать параметр core.sshCommand (ssh -i ~/.ssh/key1) - person olejorgenb; 01.10.2019
comment
если у вас есть две учетные записи github, для этого вам понадобятся разные ключи ssh, и вы можете использовать подход, предложенный здесь, в вашей конфигурации ssh: stackoverflow. com/a/23751734/1764764 - person Simon Ndunda; 08.01.2020

ответ Рэндала Шварца почти всегда помогал мне. У меня другое имя пользователя на сервере, поэтому мне пришлось добавить в свой файл ключевое слово User:

Host           friendly-name
HostName       long.and.cumbersome.server.name
IdentityFile   ~/.ssh/private_ssh_file
User           username-on-remote-machine

Теперь вы можете подключиться, используя дружественное имя:

ssh friendly-name

Другие ключевые слова можно найти на справочной странице OpenSSH. ПРИМЕЧАНИЕ. Некоторые из перечисленных ключевых слов могут уже присутствовать в вашем файле /etc/ssh/ssh_config.

person peron    schedule 30.09.2010
comment
Если я не ошибаюсь, пользователя вы обычно указываете прямо в URL-адресе при подключении с помощью user@host. - person a1an; 18.06.2013
comment
Я также предпочитаю использовать ключевое слово «Порт». Еще одно интересное ключевое слово — «StrictHostKeyChecking». - person Ethan; 25.09.2013

В предыдущих ответах правильно объяснен способ создания файла конфигурации для управления несколькими ключами ssh. Я думаю, важным моментом, который также необходимо объяснить, является замена имени хоста псевдонимом при клонировании репозитория.

Предположим, что имя пользователя учетной записи GitHub вашей компании — abc1234. И предположим, что ваше имя пользователя в личной учетной записи GitHub — jack1234.

Предположим, вы создали два ключа RSA, а именно id_rsa_company и id_rsa_personal. Таким образом, ваш файл configuration будет выглядеть следующим образом:

# Company account
Host company
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company

# Personal account
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal

Теперь, когда вы клонируете репозиторий (с именем demo) из учетной записи GitHub компании, URL-адрес репозитория будет выглядеть примерно так:

Repo URL: [email protected]:abc1234/demo.git

Теперь, выполняя git clone, вы должны изменить указанный выше URL репозитория следующим образом:

git@company:abc1234/demo.git

Обратите внимание, что github.com теперь заменен псевдонимом «компания», как мы определили в файле конфигурации.

Точно так же вам необходимо изменить URL-адрес клона репозитория в личном кабинете в зависимости от псевдонима, указанного в файле конфигурации.

person oblivion    schedule 19.07.2016
comment
Хотел бы я проголосовать за этот ответ более одного раза ... это правильный подход к проблеме, и он безопаснее и быстрее, чем другие варианты. Также более масштабируемый (позволяет определять разные ключи для одного и того же имени хоста) - person Guy; 28.03.2018
comment
Не теряйте больше времени, это ответ. Большое спасибо. - person Luis Milanese; 24.04.2018
comment
Мне очень жаль, что я не нашел этот ответ раньше ... но лучше поздно, чем никогда, большое спасибо! - person Hildy; 22.01.2019
comment
Отличное объяснение! Работает идеально для меня. И если вы забыли клонировать репо с псевдонимом, вы часто можете впоследствии отредактировать удаленный URL-адрес источника. - person tkahn; 22.01.2019
comment
только обратите внимание, потому что файл конфигурации должен быть (chmod 600) - person Christiano Matos; 05.09.2019
comment
Недавно я настраивал два разных репозитория dev.azure.com, когда мне понадобились отдельные ключи для них, и этот ответ намного проще и чище, чем другие, потрясающе - очень ценю! - person Damian Borowski; 04.12.2019
comment
Это не указано явно, но это помогает обойти главный недостаток при попытке использовать несколько ключей с GitHub: поскольку вы всегда входите в GitHub как один и тот же пользователь git, любой ключ, сохраненный в любой учетной записи GitHub, позволит войти в систему SSH. Но после входа в SSH GitHub затем проверит, авторизован ли используемый ключ для конкретного действия, которое вы пытаетесь (например, проверить репозиторий), и это не удастся, если у вас неправильный ключ. Но часть SSH прошла успешно, поэтому SSH не будет пробовать другой ключ. Это решение позволяет обойти это путем введения псевдонимов имен хостов. Великолепно! - person ntc2; 26.01.2020
comment
Также стоит упомянуть, что если вы используете ssh-agent, то вы также должны добавить опцию IdentitiesOnly yes в свою конфигурацию, иначе ssh-agent попытается подключиться к данному псевдониму с ключом для другого псевдонима, если их имена хостов совпадают. - person William Stanley; 02.03.2020
comment
Если вы не хотите изменять URL-адрес репозитория каждый раз, когда вы клонируете репозиторий, вы можете иметь Host company github.com для одной из записей в файле конфигурации, который будет вести себя как «по умолчанию». - person handris; 27.05.2021

ssh-add ~/.ssh/xxx_id_rsa

Убедитесь, что вы протестировали его перед добавлением с помощью:

ssh -i ~/.ssh/xxx_id_rsa [email protected]

Если у вас есть проблемы с ошибками, иногда помогает изменение безопасности файла:

chmod 0600 ~/.ssh/xxx_id_rsa
person user420807    schedule 15.08.2010
comment
На мой взгляд, это самое лаконичное и элегантное решение. Работал как шарм! - person artur; 01.10.2010
comment
@Bobo, можете ли вы поместить его в свой bashrc или bash_profile (или что-то еще, что эквивалентно Mac)? - person T0xicCode; 13.03.2013
comment
+1 для chmod 0600 - проблемы с разрешениями не позволяли мне подключиться - person amacy; 16.05.2013
comment
Работал как шарм для меня (и не забывайте о 0600 perms). - person Dmytro Uhnichenko; 30.05.2013
comment
Пришел из Ubuntu на Mac, и это было именно то, что мне было нужно. - person hariom; 15.04.2016
comment
NB: Ранее я создал файл конфигурации, рекомендованный в ответе Рэндала Шварца (принято). Мне пришлось удалить этот файл, чтобы это сработало. (Ответ Рэндала у меня не сработал, этот сработал после удаления этого файла) - person cssyphus; 29.11.2019
comment
Зачем вам нужен ssh-add, если вы будете указывать файл идентификации с помощью ssh -i? - person atlex2; 12.02.2021

  1. Сгенерируйте SSH-ключ:

    $ ssh-keygen -t rsa -C <[email protected]>
    
  2. Создайте еще один ключ SSH:

    $ ssh-keygen -t rsa -f ~/.ssh/accountB -C <[email protected]>
    

    Теперь в каталоге ~/.ssh/ должны существовать два открытых ключа (id_rsa.pub, accountB.pub).

    $ ls -l ~/.ssh     # see the files of '~/.ssh/' directory
    
  3. Создайте файл конфигурации ~/.ssh/config со следующим содержимым:

    $ nano ~/.ssh/config
    
    Host bitbucket.org
        User git
        Hostname bitbucket.org
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa
    
    Host bitbucket-accountB
        User git
        Hostname bitbucket.org
        PreferredAuthentications publickey
        IdentitiesOnly yes
        IdentityFile ~/.ssh/accountB
    
  4. Клонировать с default аккаунта.

    $ git clone [email protected]:username/project.git
    
  5. Клон с аккаунта accountB.

    $ git clone git@bitbucket-accountB:username/project.git
    

Подробнее здесь

person Sajib Khan    schedule 14.12.2016

Я бы согласился с Туомасом по поводу использования ssh-agent. Я также хотел добавить второй закрытый ключ для работы и это руководство мне очень помогло.

Шаги, как показано ниже:

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key e.g ssh-add ~/.ssh/id_rsa
  3. Подтвердить от $ ssh-add -l
  4. Проверьте это с помощью $ssh -v <host url>, например, ssh -v [email protected]
person Wahib Ul Haq    schedule 21.10.2014
comment
Использовав ssh-agent в течение многих лет, я недавно переключился на использование gnome-keyring Gnome в своем i3 wm. Причина проста: менеджер ключей Gnome автоматически обрабатывает добавление и удаление ключей ssh, и мне не нужно помнить ssh-add. Кроме того, мне был предоставлен один пароль для их разблокировки (и тайм-аут в указанное время для безопасности). Каждому свое. Поскольку я использую настройки gnome в Arch, с моей настройкой все было в порядке. Если вы против гномов, игнорируйте этот комментарий. - person eduncan911; 26.05.2015
comment
@ eduncan911, я согласен, что gnome-keyring может быть полезен, но на самом деле он не обрабатывает ключи ed25519, так что для меня это не начало. Обновление: я вижу из wiki.archlinux.org/index.php/GNOME/ что теперь он использует системный ssh-агент, так что это больше не проблема. - person Brian Minton; 20.08.2018

Я столкнулся с этой проблемой некоторое время назад, когда у меня было две учетные записи Bitbucket, и я хотел хранить отдельные ключи SSH для обеих. Это то, что сработало для меня.

Я создал две отдельные конфигурации ssh следующим образом.

Host personal.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/personal
Host work.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/work

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

git clone [email protected]:teamname/project.git

Мне пришлось изменить эту команду на:

git clone git@**work**.bitbucket.org:teamname/project.git

Точно так же команду клонирования из моей личной учетной записи пришлось изменить на

git clone git@personal.bitbucket.org:name/personalproject.git

См. эту ссылку для получения дополнительной информации.

person Ananth Pai    schedule 02.09.2016

Теперь, с последней версией Git, мы можем указать sshCommand в файле конфигурации Git для конкретного репозитория:

  [core]
      repositoryformatversion = 0
      filemode = true
      bare = false
      logallrefupdates = true
      sshCommand = ssh -i ~/.ssh/id_rsa_user
   [remote "origin"]
      url = [email protected]:user/repo.git
      fetch = +refs/heads/*:refs/remotes/origin/*
person Naga Kiran    schedule 19.08.2018

Используйте ssh-agent для своих ключей.

person Tuomas Pelkonen    schedule 10.03.2010
comment
Можете ли вы уточнить? - person Peter Mortensen; 05.06.2020

Вот решение, которое я использовал, вдохновленное ответом Саджиб-хана. Конфигурация по умолчанию не установлена; это моя личная учетная запись на GitLab, а другая указанная учетная запись — учетная запись моей компании. Вот что я сделал:

Сгенерируйте SSH-ключ

ssh-keygen -t rsa -f ~/.ssh/company -C "[email protected]"

Отредактируйте конфигурацию SSH

nano ~/.ssh/config
    Host company.gitlab.com
    HostName gitlab.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/company

Удалить кешированные ключи SSH

ssh-add -D

Попробуй это!

ssh -T [email protected]

Добро пожаловать в GitLab, @hugo.sohm!

ssh -T [email protected]

Добро пожаловать в GitLab, @HugoSohm!

Используй это!

Аккаунт компании

git clone [email protected]:group/project.git

Личная учетная запись / учетная запись по умолчанию

git clone [email protected]:username/project.git

Вот источник что я использовал.

person Hugo Sohm    schedule 28.04.2020

Для меня единственным рабочим решением было просто добавить это в файл ~/.ssh/config:

Host *
  IdentityFile ~/.ssh/your_ssh_key
  IdentityFile ~/.ssh/your_ssh_key2
  IdentityFile ~/.ssh/your_ssh_key3
  AddKeysToAgent yes

your_ssh_key без расширения. Не используйте .pub.

person amdev    schedule 25.05.2020
comment
Работает, но загружает, говорит, что загрузите путь к публичному ключу/.ssh/ключ: неверный формат - person Norman Potts; 20.07.2020
comment
Это то, что сработало для меня и немного похоже на ваше: $ eval "$(ssh-agent -s)" $ ssh-add ~/.ssh/{private_key} $ git clone git@{alias}:{github_user}/{repo}.git затем ~/.ssh/config Host github.com-{alias} HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/{private_key} и {repo}/.git/config [remote "origin"] url = [email protected]{alias}:{github_user}/{repo}.git fetch = +refs/heads/*:refs/remotes/origin/*. суть - person vcamargo; 13.01.2021

Вы можете создать файл конфигурации с именем config в папке ~/.ssh. Он может содержать:

Host aws
    HostName *yourip*
    User *youruser*
    IdentityFile *idFile*

Это позволит вам подключаться к таким машинам

 ssh aws
person Andrew Crowley    schedule 18.01.2016
comment
Какую форму принимает idFile? Абсолютный путь. Можете ли вы привести пример - person Peter Mortensen; 05.06.2020

Несколько пар ключей на GitHub

1.0 конфигурационный файл SSH

1.1 Создать ~/.ssh/config

1.2 chmod 600 ~/.ssh/config (обязательно)

1.3 Введите в файл следующее:

Хозяин пиццы

Имя хоста github.com

Открытый ключ PreferredAuthentications # необязательный

Файл идентификации ~/.ssh/privatekey1

Кейс A: Свежий новый клон Git

Используйте эту команду для клонирования Git:

$ git clone git@pizza:yourgitusername/pizzahut_repo.git

Примечание. Если вы хотите изменить имя хоста «пицца» в .ssh/config в будущем, перейдите в клонированную папку Git, отредактируйте строку URL-адреса файла .git/config (см. случай B)

Случай B: папка клонирования Git уже есть

2.1 Перейдите в клонированную папку, а затем перейдите в папку .git

2.2 Редактировать файл конфигурации

2.3 Обновите URL-адрес со *старого на новый:

(Old) URL = [email protected]:yourgitusername/pizzahut_repo.git

(New) URL = git@pizza:yourgitusername/pizzahut_repo.git

person Chris    schedule 08.01.2020

Тем, кто работает с aws, я настоятельно рекомендую работа с Подключение экземпляра EC2.

Amazon EC2 Instance Connect предоставляет простой и безопасный способ подключения к вашим инстансам с помощью Secure Shell (SSH).

Благодаря EC2 Instance Connect вы используете политики и принципы AWS Identity and Access Management (IAM) для управления доступом SSH к своим инстансам, устраняя необходимость в совместном использовании ключей SSH и управлении ими.

После установки соответствующих пакетов (pip install ec2instanceconnectcli или непосредственного клонирования репозитория) < strong>вы можете очень легко подключиться к нескольким экземплярам EC2, просто изменив идентификатор экземпляра:

введите здесь описание изображения


Что происходит за кулисами?

Когда вы подключаетесь к инстансу с помощью EC2 Instance Connect, API Instance Connect отправляет одноразовый открытый ключ SSH в метаданные инстанса, где он остается в течение 60 секунд. Политика IAM, прикрепленная к вашему пользователю IAM, разрешает вашему пользователю IAM передавать открытый ключ в метаданные экземпляра.

Демон SSH использует AuthorizedKeysCommand и AuthorizedKeysCommandUser, которые настраиваются при установке Instance Connect, для поиска открытого ключа в метаданных экземпляра для аутентификации и подключения вас к экземпляру.

(*) Amazon Linux 2 2.0.20190618 или более поздней версии и Ubuntu 20.04 или более поздней версии поставляются с предварительно настроенным подключением экземпляров EC2. Для других поддерживаемых дистрибутивов Linux необходимо настроить Instance Connect для каждого экземпляра, который будет поддерживать использование Instance Connect. Это одноразовое требование для каждого экземпляра.


Ссылки:

Настройка подключения экземпляра EC2
Подключение с помощью подключения экземпляра EC2
Защита хостов-бастионов с помощью Amazon EC2 Instance Connect


person RtmY    schedule 16.10.2020

ВАЖНО: вы должны запустить ssh-agent

Вы должны запустить ssh-agent (если он еще не запущен) перед использованием ssh-add следующим образом:

eval `ssh-agent -s` # start the agent

ssh-add id_rsa_2 # Where id_rsa_2 is your new private key file

Обратите внимание, что команда eval запускает агент на Git Bash в Windows. Другие среды могут использовать вариант для запуска агента SSH.

person danday74    schedule 27.07.2017

Как упоминалось на странице блога Atlassian, создайте файл config в папке .ssh, включая следующий текст:

#user1 account
 Host bitbucket.org-user1
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user1
     IdentitiesOnly yes

 #user2 account
 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user2
     IdentitiesOnly yes

Затем вы можете просто оформить заказ с доменным суффиксом, а в проектах вы можете настроить имена авторов и т. д. локально.

person dgbt    schedule 28.03.2019
comment
Я использовал то же самое для GitHub без строк IdentitiesOnly yes. Оно работает. - person Eugene Gr. Philippov; 16.05.2021

На Ubuntu 18.04 (Bionic Beaver) делать нечего .

После успешного создания второго ключа SSH система попытается найти соответствующий ключ SSH для каждого соединения.

Чтобы было ясно, вы можете создать новый ключ с помощью этих команд:

# Generate key make sure you give it a new name (id_rsa_server2)
ssh-keygen

# Make sure ssh agent is running
eval `ssh-agent`

# Add the new key
ssh-add ~/.ssh/id_rsa_server2

# Get the public key to add it to a remote system for authentication
cat ~/.ssh/id_rsa_server2.pub
person GiorgosK    schedule 09.07.2019

Мне нравится подход к установке следующего в файле ~/.ssh/config:

# Configuration for GitHub to support multiple GitHub  keys
Host  github.com
  HostName github.com
  User git

# UseKeychain adds each keys passphrase to the keychain so you
# don't have to enter the passphrase each time.
  UseKeychain yes

# AddKeysToAgent would add the key to the agent whenever it is
# used, which might lead to debugging confusion since then
# sometimes the one repository works and sometimes the
# other depending on which key is used first.
#  AddKeysToAgent yes

# I only use my private id file so all private
# repositories don't need the environment variable
# `GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa"` to be set.
  IdentityFile ~/.ssh/id_rsa

Затем в вашем репозитории вы можете создать файл .env, который содержит команду ssh, которую нужно использовать:

GIT_SSH_COMMAND="ssh -i ~/.ssh/your_ssh_key"

Если вы затем используете, например. dotenv переменная окружения экспортируется автоматически, и вы можете укажите ключ, который вы хотите для каждого проекта/каталога. Кодовая фраза запрашивается только один раз, поскольку она добавляется в цепочку для ключей.

Это решение отлично работает с Git и предназначено для работы на Mac (из-за UseKeychain).

person blackjacx    schedule 12.05.2020
comment
Работает и на окнах. ОткрытьSSH! - person Vishal Kumar Sahu; 12.01.2021

В CentOS 6.5 с OpenSSH_5.3p1 и OpenSSL 1.0.1e-fips я решил проблему следующим образом: переименовать мои ключевые файлы, чтобы ни один из них не имел имени по умолчанию.

Мой каталог .ssh содержит id_rsa_foo и id_rsa_bar, но не содержит id_rsa и т. д.

person Chris Owens    schedule 16.03.2017
comment
И как ключи используются? Есть ли автоопределение? - person robsch; 22.05.2017
comment
См. Ответ Рэндала Шварца, чтобы узнать, как выбрать правильный ключ для данного хоста stackoverflow.com/questions/2419566/ - person Chris Owens; 23.05.2017
comment
Да, это делает его более явным. Даже использование параметра -i может привести к чему-то вроде no such identity: /home/embo/.ssh/id_rsa: No such file or directory. - person Peter Mortensen; 05.06.2020

Вы можете попробовать этот пакет sshmulti npm для поддержки нескольких ключей SSH.

person Anto Khan    schedule 04.03.2020
comment
Я настоятельно рекомендую не использовать npm для чего-либо подобного. У него был каскад зависимостей, который, при беглом осмотре, включает ряд разработчиков-одиночек, пакеты, которым несколько лет. Сама страница sshmulti npm заявляет, что она не проверена. - person Jack Wasey; 02.05.2020