Лучший способ использовать несколько закрытых ключей SSH на одном клиенте - PullRequest
776 голосов
/ 10 марта 2010

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

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

ssh -i <key location> login@server.example.com 

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

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

Ответы [ 14 ]

1113 голосов
/ 10 марта 2010

Из моего .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

и т. Д.

273 голосов
/ 20 октября 2015

Вы можете указать 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, даже если он у него был.

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

244 голосов
/ 30 сентября 2010

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

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 .

96 голосов
/ 15 августа 2010
foo:~$ssh-add ~/.ssh/xxx_id_rsa

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

ssh -i ~/.ssh/xxx_id_rsa username@example.com

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

chmod 0600 ~/.ssh/xxx_id_rsa
82 голосов
/ 19 июля 2016

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

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

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

# 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: git@github.com:abc1234/demo.git

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

git@company:abc1234/demo.git

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

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

23 голосов
/ 14 декабря 2016
  1. Создание ключа SSH:

    $ ssh-keygen -t rsa -C <email1@example.com>
    
  2. Генерация another SSH key:

    $ ssh-keygen -t rsa -f ~/.ssh/accountB -C <email2@example.com>
    

    Теперь в каталоге ~/.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 git@bitbucket.org:username/project.git
    
  5. Клон с accountB аккаунта.

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

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

22 голосов
/ 21 октября 2014

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

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

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key например, ssh-add ~/.ssh/id_rsa
  3. Проверить по $ ssh-add -l
  4. Проверьте это с помощью $ssh -v <host url> например, ssh -v git@assembla.com
13 голосов
/ 02 сентября 2016

Я столкнулся с этой проблемой некоторое время назад, когда у меня было две учетные записи 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 git@bitbucket.org:teamname/project.git

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

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

Аналогично, команду клона из моего личного аккаунта пришлось изменить на

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

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

11 голосов
/ 10 марта 2010

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

7 голосов
/ 19 августа 2018

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

  [core]
      repositoryformatversion = 0
      filemode = true
      bare = false
      logallrefupdates = true
      sshCommand = ssh -i ~/.ssh/id_rsa_user   
   [remote "origin"]
      url = git@bitbucket.org:user/repo.git
      fetch = +refs/heads/*:refs/remotes/origin/*
...