it-swarm-ru.tech

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

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

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

ssh -i <key location> [email protected] 

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

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

773
Justin

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

И так далее.

1107
Randal Schwartz

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

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

272
spacesix

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

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

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

ssh friendly-name

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

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

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

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

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

chmod 0600 ~/.ssh/xxx_id_rsa
96
user420807

Предыдущие ответы правильно объяснили способ создания файла конфигурации для управления несколькими ключами 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 заменяется псевдонимом "company", как мы определили в файле конфигурации.

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

80
oblivion
  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
    

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

23
Sajib Khan

Я бы согласился с Туомасом об использовании 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 [email protected]
22
Wahib Ul Haq

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

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

13
Ananth Pai

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

11
Tuomas Pelkonen

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

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

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

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

 ssh aws
1
Andrew Crowley

ВАЖНО: Вы должны запустить 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.

1
danday74

Как упомянуто на страница блога 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

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

0
dgbt

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

0
Chris Owens