Лучший способ использовать несколько закрытых ключей SSH на одном клиенте
Я хочу использовать несколько закрытых ключей для подключения к разным серверам или различным частям одного и того же сервера (мое использование-системное администрирование сервера, администрирование Git и обычное использование Git на одном сервере). Я попытался просто сложить ключи в id_rsa
файлы без толку.
по-видимому, простой способ сделать это-использовать команду
ssh -i <key location> login@server.example.com
Это довольно громоздко.
любые предложения о том, как идти о сделать это немного проще?
13 ответов
от меня .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
User remoteusername
и так далее.
на ответ от Рэндала Шварца почти помог мне всю дорогу. У меня другое имя пользователя на сервере, поэтому мне пришлось добавить пользователей ключевое слово в моем файле:
Host friendly-name
HostName long.and.cumbersome.server.name
IdentityFile ~/.ssh/private_ssh_file
User username-on-remote-machine
теперь вы можете подключиться, используя понятное имя:
ssh friendly-name
больше ключевых слов можно найти на OpenSSH man page. Примечание: некоторые из перечисленных ключевых слов уже должен присутствовать в вашем в/etc/СШ/файле ssh_config.
вы можете поручить 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
даже если бы он был.
конечно, это не превосходит конфигурацию на сервере, как в других ответы, но, по крайней мере, вам не придется добавлять конфигурацию для всех и каждого сервера, к которому вы подключаетесь!
foo:~$ssh-add ~/.ssh/xxx_id_rsa
убедитесь, что вы проверить его перед добавлением с:
ssh -i ~/.ssh/xxx_id_rsa username@example.com
Если у вас возникли проблемы с ошибками, иногда изменение безопасности файла помогает:
chmod 0600 ~/.ssh/xxx_id_rsa
предыдущие ответы правильно объяснили способ создания файла конфигурации для управления несколькими ключами 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 теперь заменяется псевдонимом "компания", как мы определили в файле конфигурации.
аналогично, вы должны изменить URL-адрес клона репозитория в личном кабинете в зависимости от псевдонима, предоставленного в файле конфигурации.
Я бы согласился с Туомасом об использовании SSH-агента. Я также хотел добавить второй закрытый ключ для работы и в этом уроке работал как шарм для меня.
шаги, как показано ниже:
$ ssh-agent bash
-
$ ssh-add /path.to/private/key
Эл.гssh-add ~/.ssh/id_rsa
- Проверьте
$ ssh-add -l
- С
$ssh -v <host url>
Эл.гssh -v git@assembla.com
-
создать SSH ключ:
$ ssh-keygen -t rsa -C <email1@example.com>
-
создать
another SSH key
:$ ssh-keygen -t rsa -f ~/.ssh/accountB -C <email2@example.com>
теперь, два открытых ключей (id_rsa.паб, accountB.паб) следует есть в .
$ ls -l ~/.ssh # see the files of '~/.ssh/' directory
-
создать конфигурационный файл
~/.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
-
клон от
я столкнулся с этой проблемой некоторое время назад, когда у меня было две учетные записи 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
аналогично команда clone из моего личного кабинета имела изменить на
в Git клон git@персональный.тут Bitbucket.орг:имя/personalproject.ГИТ
Refer этой ссылке для получения дополнительной информации.
теперь, с последней версией git, мы можем указать sshCommand в определенный репозиторий файл git файл config.
[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/*
важно: вы должны запустить 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.
вы можете создать файл конфигурации с именем config
в своем . Он может содержать:
Host aws
HostName *yourip*
User *youruser*
IdentityFile *idFile*
Это позволит вам подключиться к машинам, как это
ssh aws
на Centos 6.5 работает OpenSSH_5.3p1, OpenSSL 1.0.1 e-fips, я решил проблему, переименовав мои ключевые файлы, чтобы ни один из них не имел имени по умолчанию. Мой. каталог ssh содержит id_rsa_foo и id_rsa_bar, но не id_rsa и т. д.