Набуття форми
Щоб керувати git repo в окремому обліковому записі 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
$ 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 repo та оновіть 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, запустіть цю команду для виведення відкритого ключа на stdout - скопіюйте / вставте, де потрібно
$ 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-агенту, щоб він включив його для використання. <hr /> Відпочинок для мене добре працює з вищезгаданим підручником.