Лучший способ использовать несколько закрытых ключей 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
и так далее.
The ответ от Рэндала Шварца почти помог мне всю дорогу. У меня есть другое имя пользователя на сервере, поэтому мне пришлось добавить пользователей ключевое слово к моему файлу:
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 / 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
теперь, когда вы клонируете хранилище(название демо) от учетной записи 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
аналогично команда клонирования из моего личного кабинета имела для изменения на
в Git клон git@персональный.тут Bitbucket.орг:имя/personalproject.ГИТ
см. этой ссылке для получения дополнительной информации.
теперь, с последней версией 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/*
важно: вы должны запустить ssh-агент
перед использованием ssh-add необходимо запустить ssh-agent (если он еще не запущен) следующим образом:
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.