Начало в форме
Чтобы управлять git-репо под отдельной учетной записью github / bitbucket / любой другой, вам просто нужно сгенерировать новый ключ SSH.
Но прежде чем мы сможем начать толкание / потянув РЕПО с вашей второй личностью, мы должны получить вас в форму - Давайте предположим , ваша система настроена с типичной id_rsa
и id_rsa.pub
парой ключей. Прямо сейчас твоя tree ~/.ssh
выглядит так
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub
Во-первых, назовите эту пару ключей - добавление описательного имени поможет вам вспомнить, какой ключ используется для какого пользователя / удаленного
# change to your ~/.ssh directory
$ cd ~/.ssh
# rename the private key
$ mv id_rsa github-mainuser
# rename the public key
$ mv id_rsa.pub github-mainuser.pub
Далее, давайте сгенерируем новую пару ключей - здесь я назову новый ключgithub-otheruser
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser
Теперь, когда мы смотрим на tree ~/.ssh
мы видим,
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub
Далее нам нужно настроить ~/.ssh/config
файл, который будет определять наши основные конфигурации. Мы создадим его с надлежащими правами владельца на чтение / запись
$ (umask 077; touch ~/.ssh/config)
Откройте его в своем любимом редакторе и добавьте следующее содержимое
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Предположительно, у вас будет несколько существующих репозиториев, связанных с вашей основной личностью github. По этой причине github.com по умолчанию Host
настроен на использование вашего mainuser
ключа. Если вы не хотите отдавать предпочтение одному аккаунту перед другим, я покажу вам, как обновить существующий репозитории в вашей системе, чтобы использовать обновленную конфигурацию ssh.
Добавьте ваш новый ключ SSH в github
Перейдите на github.com/settings/keys, чтобы добавить свой новый открытый ключ
Вы можете получить содержимое открытого ключа, используя: скопируйте / вставьте его в github
$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...
Теперь ваш новый пользовательский идентификатор полностью настроен - ниже мы покажем вам, как его использовать.
Начало работы: клонирование репо
Так как же это работает вместе с git и github? Ну, потому что без курицы и яйца нельзя, мы посмотрим на клонирование существующего репо. Эта ситуация может относиться к вам, если у вас есть новая учетная запись Github для вашего рабочего места, и вы были добавлены в проект компании.
Допустим, github.com/someorg/somerepo
уже существует, и вы были добавлены к нему - клонирование так же просто, как
$ git clone github.com-otheruser:someorg/somerepo.git
Эта выделенная жирным шрифтом часть должна соответствовать Host
названию, которое мы установили в вашем ~/.ssh/config
файле. Это правильно связывает git с соответствующими IdentityFile
и правильно аутентифицирует вас с github
Начало работы: создание нового репо
Ну, потому что вы не можете иметь курицу без яиц, мы рассмотрим публикацию нового репо на вашем дополнительном аккаунте. Эта ситуация относится к пользователям, которые создают новые контент, используя свою дополнительную учетную запись github.
Давайте предположим, что вы уже проделали небольшую работу локально, и теперь вы готовы перейти на github. Вы можете следовать за мной, если хотите
$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init
Теперь настройте этот репо, чтобы использовать вашу личность
$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"
Теперь сделайте свой первый коммит
$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"
Проверьте коммит, чтобы увидеть, что ваша новая личность была использована с помощью git log
$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>
Хорошо, время, чтобы подтолкнуть к GitHub! Поскольку github еще не знает о нашем новом репо, сначала зайдите на github.com/new и создайте новое репо - назовите его somerepo
Теперь, чтобы настроить репозиторий для «общения» с github, используя правильные идентификационные данные / учетные данные, мы добавили удаленный. Предполагая, что ваше имя пользователя github для вашей новой учетной записи someuser
...
$ git remote add origin github.com-otheruser:someuser/somerepo.git
Эта выделенная жирным шрифтом часть абсолютно важна и должна соответствовать той, Host
которую мы определили в вашем ~/.ssh/config
файле.
Наконец, подтолкнуть репо
$ git push origin master
Обновите существующее хранилище, чтобы использовать новую конфигурацию SSH
Скажем, у вас уже есть клонированный репозиторий, но теперь вы хотите использовать новую конфигурацию SSH. В приведенном выше примере, мы сохранили существующие операции РЕПО в такте, назначая предыдущую id_rsa
/ id_rsa.pub
пару ключей дляHost github.com
в файле конфигурации SSH. В этом нет ничего плохого, но у меня сейчас есть как минимум 5 конфигураций github, и я не люблю думать об одной из них как о конфигурации «по умолчанию» - я бы предпочел прояснить каждую из них.
Прежде чем у нас было это
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Так что теперь мы будем обновлять это (изменения, выделенные жирным шрифтом )
Host github.com-mainuser
HostName github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Но это означает, что теперь любое существующее хранилище с github.com
удаленным доступом больше не будет работать с этим файлом идентификации. Но не волнуйтесь, это простое решение.
Чтобы обновить любое существующее хранилище для использования вашей новой конфигурации SSH, просто откройте файл git config хранилища и обновите URL!
$ cd existingrepo
$ nano .git/config
Обновить поле удаленного источника (изменения выделены жирным шрифтом )
[remote "origin"]
url = github.com-mainuser:someuser/existingrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
Вот и все. Теперь вы можете push
/ pull
в свое удовольствие
Права доступа к файлу ключа SSH
Если у вас возникают проблемы с вашими открытыми ключами, которые не работают должным образом, SSH достаточно строг в отношении разрешений для файлов, разрешенных для вашего ~/.ssh
каталога и соответствующих файлов ключей.
Как правило, любые каталоги должны быть 700
и любые файлы должны быть 600
- это означает, что они доступны только для чтения / записи - никакая другая группа / пользователь не может читать / записывать их
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub
Как мне управлять моими SSH ключами
Я управляю отдельными ключами SSH для каждого хоста, к которому я подключаюсь, так что, если какой-либо один ключ будет скомпрометирован, мне не придется обновлять ключи в любом другом месте, где я использовал этот ключ. Это похоже на то, что когда вы получаете уведомление от Adobe о том, что 150 миллионов информации их пользователей были украдены - теперь вы должны отменить эту кредитную карту и обновить все службы, которые от нее зависят - что неприятно.
Вот как ~/.ssh
выглядит мой каталог: у меня есть один .pem
ключ для каждого пользователя, в папке для каждого домена, к которому я подключаюсь. Я использую .pem
ключи, поэтому мне нужен только один файл на ключ.
$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│ ├── naomik.pem
│ ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│ ├── naomi.pem
├── somedomain.com
│ ├── someuser.pem
└── someotherdomain.org
└── someuser.pem
И вот мой соответствующий /.ssh/config
файл - очевидно, что материал github важен для ответа на этот вопрос о github, но этот ответ направлен на то, чтобы вооружить вас знаниями для управления вашими ssh-идентификаторами на любом количестве служб / машин.
Host github.com-naomik
HostName github.com
User git
IdentityFile ~/.ssh/github.com/naomik.pem
Host github.com-someuser
HostName github.com
User git
IdentityFile ~/.ssh/github.com/someusername.pem
Host naomi.makes.software
User naomi
IdentityFile ~/.ssh/naomi.makes.software/naomi.pem
Host somedomain.com
HostName 162.10.20.30
User someuser
IdentityFile ~/.ssh/somedomain.com/someuser.pem
Host someotherdomain.org
User someuser
IdentityFile ~/.ssh/someotherdomain.org/someuser.pem
Получение вашего открытого ключа SSH из ключа PEM
Выше вы заметили, что у меня есть только один файл для каждого ключа. Когда мне нужно предоставить открытый ключ, я просто генерирую его по мере необходимости.
Поэтому, когда github запрашивает ваш открытый ключ ssh, запустите эту команду, чтобы вывести открытый ключ на стандартный вывод - копируйте / вставляйте, где это необходимо.
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...
Обратите внимание, что это также тот же процесс, который я использую для добавления моего ключа на любой удаленный компьютер. ssh-rsa AAAA...
Значение копируется пульта ~/.ssh/authorized_keys
файла
Преобразование ваших пар ключей id_rsa
/ id_rsa.pub
в формат PEM
Итак, вы хотите приручить ваши ключевые файлы и сократить некоторые ошибки в файловой системе? Конвертировать вашу пару ключей в один PEM легко
$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem
Или, следуя приведенным выше примерам, мы переименовали id_rsa -> github-mainuser
и id_rsa.pub -> github-mainuser.pub
- так
$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem
Теперь, чтобы убедиться, что мы преобразовали это правильно, вам нужно убедиться, что сгенерированный открытый ключ совпадает с вашим старым открытым ключом.
# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
Теперь, когда у вас есть github-mainuser.pem
файл, вы можете безопасно удалить свои старые github-mainuser
и github-mainuser.pub
файлы - необходим только файл PEM; просто сгенерируйте открытый ключ всякий раз, когда он вам нужен ^ _ ^
Создание ключей PEM с нуля
Вам не нужно создавать пару секретный / открытый ключ, а затем конвертировать в один ключ PEM. Вы можете создать ключ PEM напрямую.
Давайте создадим newuser.pem
$ openssl genrsa -out ~/.ssh/newuser.pem 4096
Получение открытого ключа SSH такое же
$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
ssh-add ~/.ssh/id_rsa_COMPANY
<br/> попросить ssh-agent включить его для использования. <hr /> Rest отлично работает для меня с вышеупомянутым руководством.