Кілька облікових записів github на одному комп’ютері?


418

Намагаюсь працювати над моїми фактичними репортажами про "роботу" та моїми особистими репортажами на git hub, зі свого комп'ютера.

Спершу був створений робочий рахунок, і все працює бездоганно.

Однак мій особистий обліковий запис не може здаватися на моє особисте репо, яке налаштовано під іншим обліковим записом / електронною поштою.

Я спробував скопіювати свій робочий ключ до мого особистого облікового запису, але це призводить до помилки, оскільки, звичайно, ключ можна прикріпити лише до одного облікового запису.

Як я можу натиснути / перетягнути на та з обох облікових записів із відповідних облікових даних github?


3
Кроки, наведені за посиланням http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts, добре працювали для мене і ujuст, щоб додати одне, що ви доведеться додати вам особистий ключ репо, також використовуючи & & nbsp; ssh-add ~/.ssh/id_rsa_COMPANY <br/>, щоб сказати ssh-агенту, щоб він включив його для використання. <hr /> Відпочинок для мене добре працює з вищезгаданим підручником.
Brut3e

2
"звичайно, тому що ключ може бути прикріплений лише до одного облікового запису" звичайно? чому?
Спарр

Підтримка програми Git 2.13 і далі умовно включає в себе .gitconfig, який є корисним способом управління ідентифікаціями в ієрархії папок. stackoverflow.com/a/36296990/901597
Джо Bowbeer

Відповіді:


275

Все, що вам потрібно зробити, - це налаштувати налаштування SSH за допомогою декількох SSH клавіш.

Крім того, якщо ви працюєте з декількома сховищами, використовуючи різні персони, вам потрібно переконатися, що ваші індивідуальні сховища мають відповідні параметри для налаштувань користувача:

Встановлення імені користувача, електронної пошти та маркера GitHub - Переосмислення параметрів для окремих репостів https://help.github.com/articles/setting-your-commit-email-address-in-git/

Сподіваюсь, це допомагає.

Примітка. Деякі з вас можуть вимагати використання різних електронних листів для різних сховищ, починаючи з git 2.13 ви можете встановити електронну пошту на основі каталогу, редагуючи глобальний конфігураційний файл, знайдений за адресою: ~/.gitconfigвикористовуючи умовні умови:

[user]
    name = Pavan Kataria
    email = defaultemail@gmail.com

[includeIf "gitdir:~/work/"]
    path = ~/work/.gitconfig

І тоді ваша конфігурація роботи ~ / work / .gitconfig виглядатиме так:

[user]
    email = pavan.kataria@company.tld

Дякую @alexg, що повідомили про це у коментарях.


4
3-е посилання зараз розірвано (декілька ключів SSH)
RustyTheBoyRobot

12
це перше посилання тепер перенаправляється на сторінку на облікові записи Користувача порівняно з організацією (не впевнений, що це було призначено спочатку). за цим підручником було легко простежити і вирішити мої проблеми.
Ерік Х.

1
@Camilo Оскільки я не знаю, що таке нове оновлене посилання, тож якщо він знає про оновлене посилання, тоді було б добре його підключити :)
Pavan

4
@AlmasAdilbek Минуло майже 3 роки, посилання мають перерватися і продовжувати ламатися. Хочете знайти альтернативну статтю або знову знайти оригінальне джерело, щоб потім можна було корисно оновити посилання для мого товариша? Я не можу назавжди тримати виправлення зламаних посилань.
Паван

3
Це не відповідь без узагальнення критичних кроків у вашій фактичній посаді. Ця відповідь один раз вже зазнала гниття посилань, але не зробила необхідним оновленням теб, щоб дати фактичну відповідь на питання.
Дякую

139

Використовуйте HTTPS:

змінити віддалений URL на https:

git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

і вам добре піти:

git push

Щоб переконатися, що комісії відображаються як USERNAME, можна також встановити ім'я користувача та user.email для цього проекту:

git config user.name USERNAME
git config user.email USERNAME@example.com

8
Найпростіше рішення для швидкого завантаження з іншого приватного сховища.
Jaap Geurts

1
це найкраще рішення, яке я знайшов над стеками
Harvinder Singh

Це рішення забезпечує найпростіший метод, оскільки я не хотів додавати більше ssh клавіш. Лише зауваження, якщо ви вже встановили свій прапор user.nameі user.emailз цим --globalпрапором, просто зробіть те, що він говорить вище, щоб встановити його локально лише для одного репо. Це вирішило багато неприємностей. Тепер видалити старе репо ....
thatrobotguy

72

Набуття форми

Щоб керувати 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==

2
Я розумію, що це давнє запитання, але це не виправдовує того, що майже кожна відповідь тут залежить від посилання на якийсь підручник і тому піддається гниттю посилань. Добре зв’язувати джерела / цитати, але ви не можете спиратися на посилання, якщо не узагальнити критичні біти у своїй відповіді, розміщеній тут.
Дякую

Я підтримав вашу чудову і детальну відповідь як її явно правильний спосіб це зробити. Моя проблема з цим полягає в тому, що його складний і через кілька років використання деяких облікових записів я отримую новий, то не можу пригадати, як це зробити "правильним способом". Мій шлях внизу дуже простий - я просто створюю 3 нові файли та один новий сценарій, і мені добре йти. Це працювало для мене бездоганно багато років. Читачі можуть вирішити, що для них найкраще працює.
Девід Н

DavidH Я ціную це зауваження. Відповідь відчувається складною, якщо сприймати її в цілому, але читачеві дійсно потрібно потурбуватися лише про невелику частину відповіді, якщо їх єдиною метою є додавання ще однієї ідентичності github - усіх решти частин відповіді спрямовані на те, щоб ви створили надійне рішення для управління SSH-ключами загалом, і вони абсолютно необов’язкові.
Дякую

Я думаю, що git clone github.com-otheruser:someorg/somerepo.gitпотрібно git clone git@github.com-otheruser:someorg/somerepo.git(додавання git@). Найменше, це те, що мені було потрібно.
CommonsWare

@CommonsУсуньте всі параметри командного рядка, як-от вказівку користувача, також можна виконати в конфігурації SSH. Наприклад: Host github.com(newline) User git(newline)IdentityFile ...
Дякую

24

Створюючи різні псевдоніми хоста для github.com у вашому ~ / .ssh / config та надаючи кожному ходу псевдонім свій власний ключ ssh, ви можете легко використовувати безліч плутанин безлічі облікових записів github. Це тому, що github.com відрізняє не користувача, який завжди є лише git, а ключем ssh, який ви використовували для підключення. Просто налаштуйте віддалене походження за допомогою власних псевдонімів хоста. "

Наведене вище резюме надано за коментарями до публікації в блозі нижче.

Я знайшов це пояснення найяснішим. І це працює для мене, принаймні, з квітня 2012 року.

http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/


1
Ви, ймовірно , також необхідно запустити $ ssh-add ~/.ssh/id_rsa_COMPANY- см Помилка: Відмовлено в доступі (ОткритийКлюч) - Документація користувача
Pat

22

Деталі на http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/ пов'язані з мішабою, дуже добре працюють для мене.

З цієї сторінки:

$ touch ~/.ssh/config

Потім відредагуйте цей файл таким чином (один запис на обліковий запис):

#Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

Host github-COMPANY
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_COMPANY

8
Я також зазначу, що або "github.com", або "github-КОМПАНІЯ" потрібно буде використовувати, роблячи клон (і, ймовірно, інші команди), як git clone git@github-COMPANY/repo/name.gitщоб отримати правильний ключ ssh.
Геллатан

@dtan: Як би я це здійснив, якщо мені довелося клонувати над https? git clone https://github-COMPANY/GitUserName/projectname.gitСхоже, не працює. Клавіша за замовчуванням за допомогою github.com працює чудово.
Ісаак Некіттепас

1
@IsaacRemuant, вам абсолютно потрібно перейти через https? Кожен раз, коли ви хочете тягнути / натискати, вам доведеться вводити свої облікові дані користувачів. було б найкраще, якби ви могли зробити git: //github-COMPANY...projectname.git. чи є повідомлення про помилки для https-дзвінка?
Геллатан

@dtan: У мене виникли деякі проблеми з портом 22, незважаючи на те, що він відкритий для мене. ssh: connect to host github.com port 22: Bad file number fatal: The remote end hung up unexpectedly. https був єдиним способом поки що. $ git clone https://github-USER/UserName/test_project_user.git Cloning into test_project_user... error: Couldn't resolve host 'github-USER' while accessing https://github-USER/N UserName/test_project_user.git/info/refs fatal: HTTP request failed Я не впевнений, що це може бути пов'язано з конфігураційним файлом або з тим, як я намагаюся емулювати ваш git call за допомогою https.
Ісаак Некіттепас

Зрештою, я зроблю глибокий аналіз, випробувавши все, і розміщу його належним чином як питання.
Ісаак Некіттепас

13
  • Перейдіть до ~ / .ssh
  • Створіть файл з назвою config (не має розширення)
  • Відкрийте конфігураційний файл та додайте нижче коди. (змінити відповідно до вашого акаунта)

    1. Рахунок 1

      # account_1
      Host gitlab.com-account_1
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_account_1
      
    2. Рахунок 2

      # Account2
      Host gitlab.com-Account2
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account2
      
    3. Рахунок 3

      # Account_3
      Host github.com-Account3
      HostName github.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account_3
      
  • Додайте віддалений URL таким чином

    1. Рахунок 1

      git remote add origin git@gitlab.com-account_1:group_name/repo_name.git
      
    2. Рахунок 2

      git remote add origin git@gitlab.com-Account2:group_name/repo_name.git
      
    3. Рахунок 3

      git remote add origin github.com-Account3:github_username/repo_name.git
      

Переконайтесь, що імена IdentityFile такі самі, як ви створили під час генерації ключа ssh.


Чи можете ви поясніть, чому ви використовуєте PreferredAuthentications publickey?
Олівер Пірмен

@OliverPearmain Тут я кажу ssh, що наш кращий метод аутентифікації - publickey. Ви можете використовувати пароль у програмі PreferredAuthentication, але, можливо, доведеться ввести пароль для автентифікації.
Пранів В.Р.

1
Вдячний за відповідь @Pranav VR, звучить так, що я хочу використовувати те саме :-)
Олівер Пірмен

11

Я використовую сценарії оболонки, щоб переключити мене на будь-який рахунок, який я хочу бути "активним". По суті ви починаєте з нового запуску, налаштовуйте один обліковий запис належним чином та працюючи, а потім перемістіть ці файли до імені з відповідним префіксом. Відтепер ви можете використовувати команду "github" або "gitxyz" для перемикання:

# my github script
cd ~/.ssh

if [ -f git_dhoerl -a -f git_dhoerl.pub -a -f config_dhoerl ]
then
    ; 
else 
    echo "Error: missing new files"
    exit 1
fi 

# Save a copy in /tmp, just in case
cp id_rsa /tmp
cp id_rsa.pub /tmp
cp config /tmp
echo "Saved old files in /tmp, just in case"

rm id_rsa
rm id_rsa.pub
rm config
echo "Removed current links/files"

ln git_dhoerl id_rsa
ln git_dhoerl.pub id_rsa.pub
ln config_dhoerl config

git config --global user.email "dhoerl@<company>.com"
git config --global github.user "dhoerl"        
git config --global github.token "whatever_it_is"

ssh-add -D

Мені пощастило з цим. Я також створив сценарій запуску в Xcode (для користувачів Mac), щоб він не будував мій проект, якщо я не мав належного налаштування (з моменту його використання git):

Запустити сценарій, розміщений після залежностей (використовуючи / bin / ksh як оболонку):

if [ "$(git config --global --get user.email)" != "dhoerl@<company>.com" ]
then
    exit 1
fi

EDIT: додано тести на наявність нових файлів та копіювання старих файлів у / tmp для звернення до коментаря @naomik нижче.


Будьте обережні, коли публікуєте копіювати та вставляти відповідні відповіді на довільну відповідь на багато питань, спільнота, як правило, позначається як "спам". Якщо ви це робите, то зазвичай це означає, що питання є дублікатами, тому замість цього позначте їх як такі: stackoverflow.com/questions/7548158 , stackoverflow.com/questions/3225862 , stackoverflow.com/questions/7924937
Kev

1
Це кошмар. Якщо хтось запустив цей скрипт, перш ніж зрозуміти, що їх id_rsaі id_rsa.pubключі будуть видалені, вони можуть заблокуватися з пульта.
Дякую

@naomik оновив сценарій, щоб спочатку перевірити наявність нових файлів, а також зберегти старі файли в / tmp
David H

10

Ця відповідь - для початківців (гуртів, що не вживають) . Нещодавно у мене була ця проблема, і, можливо, її тільки я, але, здається, більшість відповідей вимагають досить глибокого розуміння git. Прочитавши кілька відповідей щодо переповнення стека, включаючи цю нитку, ось кроки, які мені потрібно було зробити, щоб легко переходити між обліковими записами GitHub (наприклад, припустимо два акаунти GitHub, github.com/personal та gitHub.com/work ):

  1. Перевірте наявні ключі ssh: Відкрийте термінал і запустіть цю команду, щоб побачити / перелічити наявніls -al ~/.ssh
    файлиключів sshз розширенням -.pubце ваші ключі ssh, тому у вас повинно бути два дляоблікових записівpersonalіwork. Якщо є лише один або його немає, його час для генерації інших мудрих пропустить це.

    - Генерування ключа ssh : увійдіть до github (особистого чи робочого рахунку), перейдіть до Налаштування та скопіюйте пов’язаний електронний лист.
    Тепер поверніться до Терміналу та запустітьssh-keygen -t rsa -C "the copied email", ви побачите:

    Створення публічної / приватної пари ключів rsa.
    Введіть файл, у якому потрібно зберегти ключ (/.../.ssh/id_rsa): створюється


    id_rsa, - це ім'я за замовчуванням для ключа, що незабаром буде створений ssh, тому скопіюйте шлях та перейменуйте за замовчуванням, наприклад /.../.ssh/id_rsa_workякщо генерує робочий рахунок. введіть пароль або просто введіть ігноруйте, і ви прочитаєте щось на кшталтВибіркове випадкове зображення ключа: і зображення. зроблено.
    Повторіть цей крок ще раз для свого другого облікового запису github. Переконайтеся, що ви використовуєте правильну адресу електронної пошти та інше ім’я ключа ssh (наприклад, id_rsa_personal), щоб уникнути перезапису.
    На цьому етапі вам слід побачити дві клавіші ssh при ls -al ~/.sshповторному запуску .
  2. Пов’язати ключ ssh з обліковим записом gitHub: Наступним кроком є ​​копіювання однієї з ключів ssh, запустіть це, але замінивши власне ім'я ключа ssh: pbcopy < ~/.ssh/id_rsa_work.pubзамініть id_rsa_work.pubтим, що ви назвали своїм.
    Тепер, коли наш ключ SSH копіюється в буфер обміну, повернутися в GitHub рахунок [Переконайтеся , що ви увійшли в систему на корпоративний обліковий запис , якщо ключ SSH скопійованого id_rsa_work] і перейдіть до
    Настройки - SSH і GPG ключі і натисніть на ключовий Новий SSH кнопку (не новий ключ GPG btw: D)
    дайте назву для цього ключа, вставте ключ та натисніть кнопку Додати SSH. Тепер ви або успішно додали ключ ssh, або помітили, що він там весь час є нормальним (або ви отримали помилку, оскільки ви вибрали новий ключ GPG замістьНовий ключ SSH : D).
  3. Пов’язати ключ ssh з обліковим записом gitHub : Повторіть вищевказаний крок для другого облікового запису.
  4. Редагування глобальної конфігурації git: Останнім кроком є ​​переконання, що файл глобальної конфігурації обізнаний про всі облікові записи github (так би мовити).
    Запустіть, git config --global --editщоб відредагувати цей глобальний файл, якщо це відкриває vim, і ви не знаєте, як ним користуватися, натисніть, iщоб увійти в режим вставки, відредагуйте файл, як показано нижче, і натисніть esc, а потім :wqвийти з режиму вставки:

    [inside this square brackets give a name to the followed acc.] name = github_username email = github_emailaddress [any other name] name = github_username email = github_email [credential] helper = osxkeychain useHttpPath = true

Готово !, тепер при спробі натиснути або витягнути з репо, вам запитають, який обліковий запис GitHub слід пов’язати з цим репо, а його запитувати лише один раз, локальна конфігурація запам'ятає це посилання, а не глобальну конфігурацію, щоб ви могли працювати для різних репостів, які пов'язані з різними обліковими записами, без необхідності щоразу редагувати глобальну конфігурацію.


Вони повинні дозволяти теги для відповідей, це для Mac OS.
user4015990

5

Простіше та легше виправити, щоб уникнути плутанини ..

Користувачі Windows можуть використовувати декілька чи різні облікові записи git для різних проектів.

Наступні кроки: Перейдіть на панель керування та знайдіть менеджер довірених даних. Потім перейдіть до диспетчера облікових даних -> Акредитиви Windows

Тепер видаліть вузол git: https // github.com під заголовком загальних облікових даних

Це видалить поточні облікові дані. Тепер ви можете додати будь-який проект через git pull, він запитає ім’я користувача та пароль.

Якщо ви зіткнулися з будь-якою проблемою з іншим обліковим записом, виконайте той самий процес.

Дякую

посилайтесь на зображення


4

щойно зрозумів це для Windows, використовуючи облікові дані для кожного репо:

cd c:\User1\SomeRepo
git config --local credential.https://github.com.user1 user1
git config --local credential.useHttpPath true
git config --local credential.helper manager
git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

Формат облікових даних. https://github.com . повідомляє помічнику вхідних даних URL для облікового запису. 'UseHttpPath' повідомляє менеджеру облікових даних використовувати шлях для вхідних даних. Якщо параметр useHttpPath пропущений, менеджер облікових даних зберігатиме один обліковий запис для https://github.com . Якщо він включений, менеджер облікових даних зберігатиме декілька облікових даних, що я дуже хотів.


2

Я вважав цей дорогоцінний камінь дуже корисним: sshwitch

https://github.com/agush22/sshwitch
http://rubygems.org/gems/sshwitch

Це допомагає вимкнути клавіші ssh. Не забудьте створити резервну копію всього спочатку!

Щоб переконатися, що у комітетах пов’язана правильна адреса електронної пошти, я переконався, що файл ~ / .gitconfig має відповідну адресу електронної пошти.


2

Окрім створення декількох ключів SSH для декількох облікових записів, ви також можете додати співробітників для кожного проекту за допомогою одних і тих же електронних листів облікового запису та зберігати пароль постійно.

#this store the password permanently
$ git config --global credential.helper wincred

У мене налаштовано декілька облікових записів з різними електронними листами, після чого розміщуйте одного і того ж користувача та електронну пошту на кожному обліковому записі, як один із співпрацівників. Таким чином я можу отримати доступ до всіх облікових записів без додавання ключа SSH або переходу на інше ім’я користувача та електронну пошту для автентифікації.


2

Найпростіший і простий підхід (IMHO) - без конфігураційних файлів і не надто клопоту

Просто створіть інший ключ ssh.

Скажімо, у вас є новий робочий рахунок GitHub, просто створіть для нього новий ключ:

sh-keygen -t rsa -C "email@work_mail.com" -f "id_rsa_work_user1"`

Тепер ви повинні мати старий і новий, щоб побачити їх, запустити:

ls -al ~/.ssh

Виконати вищезазначене потрібно лише один раз.

Відтепер щоразу, коли потрібно переключитися між двома, просто запустіть:

ssh-add -D
ssh-add ~/.ssh/id_rsa_work_user1 #make to use this without the suffix .pub

Щоб переключитися на старий, запустіть ще раз:

 ssh-add -D
 ssh-add ~/.ssh/<previous id_rsa>

1

Ще один простіший спосіб - це використання декількох додатків для настільних ПК, як-от те, що я роблю, використання облікового запису A на робочому столі Github, а також використання акаунта B на Github Kraken



1

У випадку, якщо ви не хочете возитися з ~/.ssh/configфайлом, згаданим тут, ви можете замість цього запустити git config core.sshCommand "ssh -i ~/.ssh/custom_id_rsa"в репо, де ви хочете зробити з іншого облікового запису.

Решта налаштувань однакова:

  1. Створіть новий ключ SSH для другого облікового запису за допомогою ssh-keygen -t rsa -f ~/.ssh -f ~/.ssh/custom_id_rsa

  2. Увійдіть до github за допомогою іншого облікового запису, перейдіть на сторінку https://github.com/settings/keys та вставте вміст~/.ssh/custom_id_rsa.pub

  3. Переконайтеся, що ви використовуєте SSH замість HTTPS як віддалений URL: git remote set-url origin git@github.com:upstream_project_teamname/upstream_project.git


0

Вам не доведеться вести два різні рахунки для особистої та роботи. Насправді Github рекомендує вам вести єдиний обліковий запис і допомагає вам об’єднати обидва.

Перейдіть за посиланням нижче, щоб об’єднатися, якщо вирішите, що не потрібно підтримувати кілька облікових записів.

https://help.github.com/articles/merging-multiple-user-accounts/


0

На відміну від інших відповідей, де вам потрібно виконати кілька кроків, щоб скористатися двома різними обліковими записами github від однієї машини, для мене це працювало в два етапи .

Вам просто потрібно:

1) генерувати загальнодоступні та приватні пари ключів SSH для кожного вашого облікового запису під ~/.sshрозташуванням з різними іменами та

2) додайте створені відкриті ключі до відповідного облікового запису в розділі Settings>> SSH and GPG keys>>New SSH Key .

Для створення пар відкритого та приватного ключів SSH використовуйте таку команду:

cd ~/.ssh
ssh-keygen -t rsa -C "email@work.com" -f "id_rsa_WORK"
ssh-keygen -t rsa -C "email@gmail.com" -f "id_rsa_PERSONAL"

В результаті наведених вище команд, id_rsa_WORKіid_rsa_WORK.pub файли будуть створені для вашого робочого рахунку (ex - git.work.com) id_rsa_PERSONALі id_rsa_PERSONAL.pubбудуть створені для вашого особистого облікового запису (ex - github.com).

Створивши, скопіюйте вміст із кожного загальнодоступного (*.pub ) файлу та виконайте крок 2 для кожного облікового запису.

PS : Не потрібно робити хост-запис для кожного облікового запису git в~/.ssh/config файлі, як зазначено в інших відповідях, якщо ім'я хоста двох ваших облікових записів відрізняються.


Як перемикатися між двома обліковими записами на вашому локальному ПК?
user4015990

1
Не потрібно перемикатися. Щоразу, коли ви клонуєте РЕПО в локальному масштабі, інформація про обліковий запис буде збережена за допомогою git у вашому місцевому репо. Тому щоразу, коли ви будете робити git push або тягнути всередину цього локального репо, вищевказана конфігурація виявить, який обліковий запис потрібно врахувати.
Сахіл Чхабра

0

Якщо у вас інстальовано WSL, у вас може бути два окремі акаунти git - один на WSL та один у Windows.


0

Ви повинні і не повинні підштовхувати до проекту деякі загальні дані. Після запуску на новій машині виконайте такі дії, щоб налаштувати та правильно використовувати свої облікові дані gitlab:

  • створити лобкові / приватні ключі ssh на машині
  • скопіюйте вставити відкритий ключ до інтерфейсу інтерфейсу gitlab / github (кожен, хто натякає, як зробити через лінію cmd, отримує безкоштовне пиво ...)
  • переконайтесь, що ви клонуєте репо через git, а не http URL
  • встановіть псевдонім git, щоб уникнути постійного набору того самого префікса до команди git
  • під час вчинення git ЗАВЖДИ використовуйте прапорці автора та електронної пошти
  • використовуйте git як звичайно, ви б це зробили

Все це наступним чином:

 # create the public / private key credentials on that specific machine
 ssh-keygen -t rsa -b 4096 -C "<<you>>@org.net" -f ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # setup your public key in the gitlab ui 
 cat ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # make sure you clone the repo via the git and not http url
 git clone git@git.in.org.net:org/some-repo.git

 # set the git alias to avoid constant typing of the repeating prefix to the git cmd
 alias git='GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.<<you>>.`hostname -s`" git'

 # during git commit ALWAYS use the author and e-mail flags
 git add --all ; git commit -nm "$git_msg" --author "YourFirstName YourLastName <you@phz.fi>"

 # use git as normal
 git fetch --all; git pull --all 

0
  1. Перейдіть до каталогу, в якому потрібно перенести зміни до іншого облікового запису GitHub.
  2. Створіть новий ключ SSH у своєму терміналі / командному рядку.

    ssh-keygen -t rsa -C "Ваша електронна адреса"

  3. Потім буде показано наступне:

    Створення публічної / приватної пари ключів rsa. Введіть файл, у якому потрібно зберегти ключ (/home/your_username/.ssh/id_rsa):

Скопіюйте та вставте шлях із наступним ідентифікаційним іменем для файлу:

/home/your_username/.ssh/id_rsa_personal

4) Потім він попросить вас:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

5) Тепер ви можете ввести наступну команду, щоб побачити всі ключі SSH, які є у вас на локальній машині:

ls -al ~/.ssh

Ви повинні мати можливість бачити ваш новий ключ ключа SSH. Як ви бачите в моєму, у мене є і id_rsa_test, і id_rsa_personal.pub.

drwx------  2 gmadmin gmadmin 4096 Nov 16 22:20 .
drwxr-xr-x 42 gmadmin gmadmin 4096 Nov 16 21:03 ..
-rw-------  1 gmadmin gmadmin 1766 Nov 16 22:20 id_rsa_personal
-rw-r--r--  1 gmadmin gmadmin  414 Nov 16 22:20 id_rsa_personal.pub
-rw-r--r--  1 gmadmin gmadmin  444 Nov  6 11:32 known_hosts

6) Далі вам потрібно скопіювати ключ SSH, який зберігається у файлі id_rsa_personal.pub. Ви можете відкрити це в текстовому редакторі на ваш вибір. Зараз я використовую atom, тому я відкрив файл за допомогою наступної команди:

atom ~/.ssh/id_rsa_personal.pub

Потім ви отримаєте щось подібне до цього:

ssh-rsa AAB3HKJLKC1yc2EAAAADAQABAAABAQCgU5 + ELtwsKkmcoeF3hNd7d6CjW + dWut83R / Dc01E / YzLc5ZFri18doOwuQoeTPpmIRVDGuQQsZlxmwwkwhmrwrrrrrrrrrrrrrrrrrrrrrrrrrrrrmvvvvmvqmkvklkwlkrkqhqhhrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

7) Скопіюйте це та перейдіть до свого облікового запису GitHub → Налаштування → Клавіші SSH та GPG 8) Клацніть на Новій клавіші SSH. Скопіюйте ключ, дайте йому заголовок і додайте його. 9) Додати ключ від терміналу

ssh-add ~/.ssh/id_rsa_personal
Enter passphrase for /home/your_username/.ssh/id_rsa_personal: 

10) Налаштування користувача та пароля.

git config --global user.name "gitusername"
git config --global user.email "gitemail"

11) Ми готові взяти на себе зобов’язання і просувати зараз.

git init
git add .
git commit 
git push

0

Якщо ви створили або клонували інший сховище, і ви не змогли витягнути originабо upstreamдодати ключ ssh до цього каталогу за допомогою наступної команди.

Це помилка, яку я отримував тут:

Warning: Permanently added the RSA host key for IP address '61:fd9b::8c52:7203' to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Я використав таку команду, яка працює:

ssh-add ~/.ssh/id_rsa_YOUR_COMPANY_NAME

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.