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