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

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

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

ssh -i <key location> [email protected] 

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

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

Ответ 1

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

И так далее.

Ответ 2

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

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

Ответ 3

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

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.

Ответ 4

foo:~$ssh-add ~/.ssh/xxx_id_rsa

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

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

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

chmod 0600 ~/.ssh/xxx_id_rsa

Ответ 5

В предыдущих ответах правильно объяснили, как создать файл конфигурации для управления несколькими ключами 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: [email protected]:abc1234/demo.git

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

[email protected]:abc1234/demo.git

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

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

Ответ 6

  1. Создать ключ SSH:

    $ ssh-keygen -t rsa -C <[email protected]>
    
  2. Создайте another SSH key:

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

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

    $ 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 [email protected]:username/project.git
    

Смотрите больше здесь

Ответ 7

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

Шаги следующие:

  • $ ssh-agent bash
  • $ ssh-add /path.to/private/key e.g ssh-add ~/.ssh/id_rsa
  • Подтвердить $ ssh-add -l
  • Проверьте его с помощью $ssh -v <host url> e.g ssh -v [email protected]

Ответ 8

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

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

git clone git @personal.bitbucket.org: имя /personalproject.git

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

Ответ 9

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

Ответ 10

Теперь, с последней версией 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/*

Ответ 11

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

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

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

 ssh aws

Ответ 12

ВАЖНО: вы должны запустить 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 в окнах. В других средах может использоваться вариант запуска агента SSH.

Ответ 13

В Centos 6.5, работающем под OpenSSH_5.3p1, OpenSSL 1.0.1e-fips, я решил проблему, переименовав мои файлы ключей, чтобы ни у одного из них не было имени по умолчанию. В моем каталоге .ssh содержатся id_rsa_foo и id_rsa_bar, но нет id_rsa и т.д.

Ответ 14

Как упомянуто на странице блога atlassian, создайте конфигурацию в .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

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

Ответ 15

На убунту 18.04 делать нечего.

После успешного создания 2-го ключа 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