Nhiều tài khoản github trên cùng một máy tính?


419

Cố gắng làm việc trên cả repos "công việc" thực tế của tôi và repos cá nhân của tôi trên git hub, từ máy tính của tôi.

Tài khoản công việc được thiết lập đầu tiên và mọi thứ hoạt động hoàn hảo.

Tuy nhiên, tài khoản cá nhân của tôi dường như không thể chuyển sang repo cá nhân của tôi, được thiết lập dưới một tài khoản / email khác.

Tôi đã thử sao chép khóa công việc của mình lên tài khoản cá nhân của mình, nhưng điều đó gây ra lỗi, vì tất nhiên một khóa chỉ có thể được gắn vào một tài khoản.

Làm cách nào tôi có thể đẩy / kéo đến và từ cả hai tài khoản, từ thông tin đăng nhập github tương ứng của họ?


3
Các bước được đưa ra trong liên kết http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multipl-accounts hoạt động tốt với tôi và ujust để thêm một điều bạn cũng phải thêm khóa repo cá nhân của bạn bằng cách sử dụng <br> & nbsp; ssh-add ~/.ssh/id_rsa_COMPANY <br/> để báo cho ssh-agent đưa nó vào sử dụng. <hr /> Phần còn lại hoạt động tốt với tôi với hướng dẫn đã đề cập ở trên.
Brut3e

2
"bởi vì tất nhiên một khóa chỉ có thể được gắn vào một tài khoản" tất nhiên? tại sao?
Sparr

Git 2.13 trở đi hỗ trợ có điều kiện bao gồm trong .gitconfig, đây là một cách hữu ích để quản lý danh tính theo phân cấp thư mục. stackoverflow.com/a/36296990/901597
Joe Bowbeer

Câu trả lời:


275

Tất cả những gì bạn cần làm là định cấu hình thiết lập SSH của bạn với nhiều khóa SSH.

Ngoài ra, nếu bạn đang làm việc với nhiều kho lưu trữ bằng cách sử dụng các personas khác nhau, bạn cần đảm bảo rằng các kho riêng lẻ của bạn có cài đặt người dùng được ghi đè tương ứng:

Đặt tên người dùng, email và mã thông báo GitHub - Ghi đè cài đặt cho từng repos riêng lẻ https://help.github.com/articles/setting-your-commit-email-address-in-git/

Hi vọng điêu nay co ich.

Lưu ý: Một số bạn có thể yêu cầu các email khác nhau được sử dụng cho các kho lưu trữ khác nhau, từ git 2.13, bạn có thể đặt email trên cơ sở thư mục bằng cách chỉnh sửa tệp cấu hình chung được tìm thấy tại: ~/.gitconfigsử dụng các điều kiện như vậy:

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

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

Và sau đó, cấu hình cụ thể cho công việc của bạn ~ / work / .gitconfig sẽ như thế này:

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

Cảm ơn bạn @alexg đã thông báo cho tôi về điều này trong các bình luận.


4
Liên kết thứ 3 hiện đã bị hỏng (Nhiều khóa SSH)
RustyTheBoyRobot

12
liên kết đầu tiên đó bây giờ chuyển hướng đến một trang trên tài khoản Người dùng và tổ chức (không chắc đó có phải là mục đích ban đầu không). hướng dẫn này rất dễ để làm theo và giải quyết vấn đề của tôi.
Eric H.

1
@Camilo Bởi vì tôi không biết liên kết được cập nhật mới là gì, vì vậy nếu anh ấy biết về liên kết được cập nhật, thì anh ấy sẽ rất tốt khi kết nối nó :)
Pavan

4
@AlmasAdilbek Đã gần 3 năm rồi, các liên kết chắc chắn sẽ bị phá vỡ và tiếp tục bị phá vỡ. Muốn tìm một bài viết thay thế hoặc tìm lại nguồn gốc để bạn có thể cập nhật liên kết cho tôi một cách hữu ích? Tôi không thể mãi mãi sửa chữa các liên kết bị hỏng.
Pavan

3
Đây không phải là một câu trả lời mà không tóm tắt các bước quan trọng trong bài viết thực tế của bạn. Câu trả lời này đã bị thối liên kết một lần, nhưng chưa thực hiện cập nhật cần thiết thì cung cấp câu trả lời thực sự cho câu hỏi.
Cảm ơn bạn vào

139

Sử dụng HTTPS:

thay đổi url từ xa thành https:

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

và bạn tốt để đi:

git push

Để đảm bảo rằng các cam kết xuất hiện như được thực hiện bởi USERNAME, người ta cũng có thể thiết lập user.nameuser.email cho dự án này:

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

8
Giải pháp đơn giản nhất để tải nhanh từ kho lưu trữ riêng khác.
Jaap Geurts

1
đây là giải pháp tốt nhất tôi tìm thấy trong các ngăn xếp
Harvestinder Singh

Giải pháp này cung cấp phương pháp đơn giản nhất vì tôi không muốn thêm nhiều khóa ssh. Chỉ cần một lưu ý, nếu bạn đã đặt cờ user.nameuser.emailvới --globalcờ, chỉ cần làm những gì anh ấy nói ở trên để đặt cục bộ cho chỉ một repo đó. Điều đó đã giải quyết rất nhiều rắc rối. Bây giờ để xóa repo cũ ....
thatrobotguy

72

Bắt đầu hình thành

Để quản lý repo git trong một tài khoản github / bitbucket / bất cứ tài khoản riêng biệt nào, bạn chỉ cần tạo một khóa SSH mới.

Nhưng trước khi chúng tôi có thể bắt đầu đẩy / kéo repos bằng danh tính thứ hai của bạn, chúng tôi phải giúp bạn thành hình - Giả sử hệ thống của bạn được thiết lập với một cặp khóa id_rsavà điển hình id_rsa.pub. Ngay bây giờ tree ~/.sshtrông bạn như thế này

$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub

Đầu tiên, đặt tên cho cặp khóa đó - thêm tên mô tả sẽ giúp bạn nhớ khóa nào được sử dụng cho người dùng / từ xa nào

# 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

Tiếp theo, hãy tạo một cặp khóa mới - ở đây tôi sẽ đặt tên cho khóa mớigithub-otheruser

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser

Bây giờ, khi chúng ta nhìn vào tree ~/.sshchúng ta thấy

$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub

Tiếp theo, chúng ta cần thiết lập một ~/.ssh/configtệp sẽ xác định các cấu hình chính của chúng ta. Chúng tôi sẽ tạo nó với các quyền chỉ đọc / ghi chủ sở hữu thích hợp

$ (umask 077; touch ~/.ssh/config)

Mở nó với trình soạn thảo yêu thích của bạn và thêm các nội dung sau

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

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

Có lẽ, bạn sẽ có một số repos hiện có liên quan đến danh tính github chính của bạn. Vì lý do đó, github.com "mặc định" Hostđược thiết lập để sử dụng mainuserkhóa của bạn . Nếu bạn không muốn ưu tiên một tài khoản hơn tài khoản khác, tôi sẽ chỉ cho bạn cách cập nhật các repos hiện có trên hệ thống của bạn để sử dụng cấu hình ssh được cập nhật.


Thêm khóa SSH mới của bạn vào github

Trụ sở để github.com/settings/keys để thêm mới bạn nào quan trọng

Bạn có thể lấy nội dung khóa công khai bằng cách sử dụng: sao chép / dán nó vào github

$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...

Bây giờ danh tính người dùng mới của bạn là tất cả thiết lập - bên dưới chúng tôi sẽ chỉ cho bạn cách sử dụng nó.


Hoàn thành công việc: nhân bản một repo

Vì vậy, làm thế nào điều này kết hợp với nhau để làm việc với git và github? Chà vì bạn không thể có gà mà không có trứng, chúng tôi sẽ xem xét nhân bản một repo hiện có. Tình huống này có thể áp dụng cho bạn nếu bạn có tài khoản github mới cho nơi làm việc và bạn đã được thêm vào một dự án của công ty.

Giả sử github.com/someorg/somerepođã tồn tại và bạn đã được thêm vào nó - nhân bản dễ dàng như

$ git clone github.com-otheruser:someorg/somerepo.git

Phần in đậm đó phải khớp với Hosttên chúng tôi thiết lập trong ~/.ssh/configtệp của bạn . Điều đó kết nối chính xác git với tương ứng IdentityFilevà xác thực chính xác bạn với github


Hoàn thành công việc: tạo một repo mới

Chà vì bạn không thể có gà mà không có trứng, chúng tôi sẽ xem xét xuất bản một repo mới trên tài khoản phụ của bạn. Tình huống này áp dụng cho người dùng đang tạo nội dung mới bằng tài khoản github thứ cấp của họ.

Giả sử bạn đã hoàn thành một công việc nhỏ tại địa phương và giờ bạn đã sẵn sàng để chuyển sang github. Bạn có thể theo cùng với tôi nếu bạn thích

$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init

Bây giờ cấu hình repo này để sử dụng danh tính của bạn

$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"

Bây giờ hãy thực hiện cam kết đầu tiên của bạn

$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"

Kiểm tra cam kết để xem danh tính mới của bạn đã được sử dụng bằng nhật ký git

$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>

Được rồi, thời gian để đẩy đến github! Vì github chưa biết về repo mới của chúng tôi, trước tiên, hãy truy cập github.com/new và tạo repo mới của bạn - đặt tên cho nó là somerepo

Bây giờ, để định cấu hình repo của bạn để "nói chuyện" với github bằng cách sử dụng danh tính / thông tin xác thực chính xác, chúng tôi đã thêm một điều khiển từ xa. Giả sử tên người dùng github cho tài khoản mới của bạn là someuser...

$ git remote add origin github.com-otheruser:someuser/somerepo.git

Phần in đậm đó là cực kỳ quan trọng và nó phải phù hợp với phần Hostchúng tôi đã xác định trong ~/.ssh/configtệp của bạn

Cuối cùng, đẩy repo

$ git push origin master

Cập nhật một repo hiện có để sử dụng cấu hình SSH mới

Giả sử bạn đã có một số repo nhân bản, nhưng bây giờ bạn muốn sử dụng cấu hình SSH mới. Trong ví dụ trên, chúng tôi đã giữ các repos hiện có của bạn một cách khéo léo bằng cách gán cặp khóa id_rsa/ id_rsa.pubkhóa trước Host github.comcủa bạn trong tệp cấu hình SSH của bạn. Không có gì sai với điều này, nhưng tôi có ít nhất 5 cấu hình github và tôi không muốn nghĩ về một trong số chúng là cấu hình "mặc định" - tôi muốn nói rõ hơn về từng cấu hình.

Trước khi chúng tôi có điều này

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

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

Vì vậy, bây giờ chúng tôi sẽ cập nhật điều đó (thay đổi in đậm )

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

Nhưng điều đó có nghĩa là bây giờ mọi repo hiện có với github.comđiều khiển từ xa sẽ không còn hoạt động với tệp nhận dạng này. Nhưng đừng lo lắng, đó là một sửa chữa đơn giản.

Để cập nhật mọi repo hiện có để sử dụng cấu hình SSH mới của bạn, chỉ cần mở tệp cấu hình git của repo và cập nhật url!

$ cd existingrepo
$ nano .git/config

Cập nhật trường nguồn gốc từ xa (thay đổi in đậm )

[remote "origin"]
        url = github.com-mainuser:someuser/existingrepo.git
        fetch = +refs/heads/*:refs/remotes/origin/*

Đó là nó. Bây giờ bạn có thể push/ pullvới nội dung trái tim của bạn


Quyền truy cập tệp chính SSH

Nếu bạn gặp rắc rối với các khóa công khai không hoạt động chính xác, SSH khá nghiêm ngặt đối với các quyền của tệp được cho phép trên ~/.sshthư mục của bạn và các tệp khóa tương ứng

Theo nguyên tắc thông thường, mọi thư mục nên có 700và mọi tệp nên 600- điều này có nghĩa là chúng chỉ có chủ sở hữu đọc / ghi - không nhóm / người dùng nào khác có thể đọc / ghi chúng

$ 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

Cách tôi quản lý các khóa SSH của mình

Tôi quản lý các khóa SSH riêng cho mọi máy chủ mà tôi kết nối, để nếu bất kỳ một khóa nào bị xâm phạm, tôi không phải cập nhật khóa trên mọi nơi khác mà tôi đã sử dụng khóa đó. Điều này giống như khi bạn nhận được thông báo từ Adobe rằng 150 triệu thông tin người dùng của họ đã bị đánh cắp - bây giờ bạn phải hủy thẻ tín dụng đó và cập nhật mọi dịch vụ phụ thuộc vào nó - thật phiền toái.

Đây là ~/.sshthư mục của tôi trông như thế nào: Tôi có một .pemkhóa cho mỗi người dùng, trong một thư mục cho mỗi tên miền tôi kết nối. Tôi sử dụng .pemcác khóa để tôi chỉ cần một tệp cho mỗi khóa.

$ 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

Và đây là /.ssh/configtập tin tương ứng của tôi - rõ ràng là công cụ github có liên quan để trả lời câu hỏi này về github, nhưng câu trả lời này nhằm trang bị cho bạn kiến ​​thức để quản lý danh tính ssh của bạn trên bất kỳ số lượng dịch vụ / máy nào.

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

Lấy khóa công khai SSH của bạn từ khóa PEM

Ở trên bạn nhận thấy rằng tôi chỉ có một tệp cho mỗi khóa. Khi tôi cần cung cấp khóa công khai, tôi chỉ cần tạo nó khi cần.

Vì vậy, khi github yêu cầu khóa công khai ssh của bạn, hãy chạy lệnh này để xuất khóa công khai thành thiết bị xuất chuẩn - sao chép / dán khi cần thiết

$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...

Lưu ý, đây cũng là quy trình tương tự tôi sử dụng để thêm khóa của mình vào bất kỳ máy từ xa nào. Các ssh-rsa AAAA...giá trị được sao chép vào điều khiển từ xa ~/.ssh/authorized_keystập tin


Chuyển đổi cặp id_rsa/ id_rsa.pubkhóa của bạn sang định dạng PEM

Vì vậy, bạn muốn chế ngự các tập tin chính của bạn và cắt giảm một số hệ thống tập tin? Chuyển đổi cặp khóa của bạn thành một PEM duy nhất thật dễ dàng

$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem

Hoặc, theo cùng với các ví dụ của chúng tôi ở trên, chúng tôi đã đổi tên id_rsa -> github-mainuserid_rsa.pub -> github-mainuser.pub- vì vậy

$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem

Bây giờ chỉ để đảm bảo rằng chúng tôi đã chuyển đổi chính xác, bạn sẽ muốn xác minh rằng khóa chung được tạo phù hợp với khóa chung cũ của bạn

# 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==

Bây giờ bạn đã có github-mainuser.pemtệp của mình , bạn có thể xóa tệp cũ github-mainusergithub-mainuser.pubtệp của mình một cách an toàn - chỉ cần tệp PEM; chỉ cần tạo khóa công khai bất cứ khi nào bạn cần nó ^ _ ^


Tạo khóa PEM từ đầu

Bạn không cần tạo cặp khóa riêng / chung và sau đó chuyển đổi thành một khóa PEM duy nhất. Bạn có thể tạo khóa PEM trực tiếp.

Hãy tạo ra một newuser.pem

$ openssl genrsa -out ~/.ssh/newuser.pem 4096

Lấy khóa công khai SSH là như nhau

$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==

2
Tôi hiểu đây là một câu hỏi cũ nhưng điều đó không thể bào chữa được rằng hầu như mọi câu trả lời ở đây đều phụ thuộc vào một liên kết đến một số hướng dẫn và do đó có thể bị thối liên kết. Sẽ tốt khi liên kết các nguồn / trích dẫn, nhưng bạn không thể dựa vào một liên kết nếu bạn không tóm tắt các bit quan trọng trong câu trả lời của bạn được đăng ở đây.
Cảm ơn bạn

Tôi nêu lên câu trả lời xuất sắc và chi tiết của bạn vì đây rõ ràng là cách chính xác để làm điều đó. Vấn đề của tôi với nó là nó phức tạp và sau vài năm sử dụng một số tài khoản, tôi có một tài khoản mới, sau đó không thể nhớ lại cách thực hiện "đúng cách". Cách của tôi dưới đây rất đơn giản - Tôi chỉ cần tạo 3 tệp mới và một tập lệnh mới, và tôi rất tốt để đi. Nó làm việc hoàn hảo cho tôi trong nhiều năm. Độc giả có thể quyết định những gì làm việc tốt nhất cho họ.
David H

DavidH Tôi đánh giá cao nhận xét. Câu trả lời sẽ cảm thấy phức tạp nếu bạn nói một cách tổng thể, nhưng người đọc thực sự chỉ cần quan tâm đến phần của câu trả lời nếu mục tiêu duy nhất của họ là thêm một danh tính github khác - tất cả các phần còn lại của Câu trả lời nhằm mục đích thiết lập cho bạn một giải pháp mạnh mẽ để quản lý các khóa SSH nói chung và hoàn toàn không bắt buộc.
Cảm ơn bạn

Tôi nghĩ rằng git clone github.com-otheruser:someorg/somerepo.gitcần phải được git clone git@github.com-otheruser:someorg/somerepo.git(thêm git@). Ít nhất, đó là những gì tôi cần.
CommonsWare

@CommonsWare tất cả các tùy chọn dòng lệnh, như chỉ định người dùng, cũng có thể được thực hiện trong cấu hình SSH. Ví dụ: Host github.com(dòng mới) User git(dòng mới)IdentityFile ...
Cảm ơn bạn

24

Bằng cách tạo các bí danh máy chủ khác nhau cho github.com trong ~ / .ssh / config của bạn và cung cấp cho mỗi bí danh máy chủ khóa ssh riêng, bạn có thể dễ dàng sử dụng nhiều tài khoản github mà không bị nhầm lẫn. Đó là bởi vì github.com phân biệt không phải bởi người dùng, mà luôn luôn chỉ là git, mà bởi khóa ssh bạn đã sử dụng để kết nối. Chỉ cần định cấu hình nguồn gốc từ xa của bạn bằng cách sử dụng bí danh máy chủ của riêng bạn.

Tóm tắt ở trên là lịch sự của các bình luận trên bài viết blog dưới đây.

Tôi đã tìm thấy lời giải thích này rõ ràng nhất. Và nó hoạt động với tôi, ít nhất là vào tháng Tư năm 2012.

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


1
Bạn cũng có thể cần phải chạy $ ssh-add ~/.ssh/id_rsa_COMPANY- xem Lỗi: Quyền bị từ chối (khóa công khai) - Tài liệu người dùng
Pat

22

Các chi tiết tại http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multipl-accounts/ được liên kết bởi mishaba hoạt động rất tốt đối với tôi.

Từ trang đó:

$ touch ~/.ssh/config

Sau đó chỉnh sửa tệp đó thành một cái gì đó như thế này (một mục nhập cho mỗi tài khoản):

#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
tôi cũng sẽ lưu ý rằng "github.com" hoặc "github-COMPANY" sẽ cần được sử dụng khi thực hiện một bản sao (và có thể là các lệnh khác) git clone git@github-COMPANY/repo/name.gitđể có được khóa ssh chính xác.
hellatan

@dtan: Làm thế nào tôi có thể thực hiện điều này nếu tôi phải sao chép qua https? git clone https://github-COMPANY/GitUserName/projectname.gitdường như không hoạt động. Khóa mặc định sử dụng github.com hoạt động tốt.
Isaac Nequittepas

1
@IsaacRem đi, bạn có nhất thiết phải đi qua https không? Mỗi lần bạn muốn kéo / đẩy bạn phải nhập thông tin đăng nhập của người dùng. sẽ là tốt nhất nếu bạn có thể làm git: //github-COMPANY...projectname.git. Có bất kỳ thông báo lỗi cho cuộc gọi https?
hellatan

@dtan: Tôi đã gặp một số vấn đề với cổng 22 mặc dù rõ ràng đã được mở cho tôi. ssh: connect to host github.com port 22: Bad file number fatal: The remote end hung up unexpectedly. https là cách duy nhất cho đến nay. $ 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 Tôi không chắc chắn rằng nó có thể liên quan đến tệp cấu hình hoặc cách mà tôi đang cố gắng mô phỏng cuộc gọi git của bạn bằng https.
Isaac Nequittepas

Cuối cùng, tôi sẽ phân tích chuyên sâu thử mọi thứ và đăng nó một cách thích hợp như một câu hỏi.
Isaac Nequittepas

13
  • Chuyển đến ~ / .ssh
  • Tạo một tệp có tên config (không có phần mở rộng)
  • Mở tập tin cấu hình và thêm mã dưới đây. (thay đổi theo tài khoản của bạn)

    1. Tài khoản 1

      # account_1
      Host gitlab.com-account_1
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_account_1
      
    2. Tài khoản 2

      # Account2
      Host gitlab.com-Account2
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account2
      
    3. Tài khoản 3

      # Account_3
      Host github.com-Account3
      HostName github.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account_3
      
  • Thêm url từ xa như sau

    1. Tài khoản 1

      git remote add origin git@gitlab.com-account_1:group_name/repo_name.git
      
    2. Tài khoản 2

      git remote add origin git@gitlab.com-Account2:group_name/repo_name.git
      
    3. Tài khoản 3

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

Đảm bảo rằng các tên IdentityFile giống như bạn đã tạo trong quá trình tạo khóa ssh.


Bạn có thể vui lòng giải thích tại sao bạn sử dụng PreferredAuthentications publickey?
Oliver Pearmain

@OliverPearmain Ở đây tôi nói với ssh rằng phương thức xác thực ưa thích của chúng tôi là khóa công khai. Bạn có thể sử dụng mật khẩu trong PreferredAuthentifying nhưng bạn có thể phải nhập mật khẩu để xác thực.
Pranav VR

1
Đánh giá cao câu trả lời @Pranav VR, nghe có vẻ như tôi muốn sử dụng tương tự :-)
Oliver Pearmain

11

Tôi sử dụng shell script để chuyển tôi sang bất kỳ tài khoản nào tôi muốn "hoạt động". Về cơ bản, bạn bắt đầu từ một khởi đầu mới, lấy một tài khoản được cấu hình đúng cách và hoạt động, sau đó di chuyển các tệp này sang một tên có tiền tố thích hợp. Từ đó trở đi, bạn có thể sử dụng lệnh "github" hoặc "gitxyz" để chuyển đổi:

# 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

Tôi đã có may mắn với điều này. Tôi cũng đã tạo một tập lệnh chạy trong Xcode (cho người dùng Mac của bạn) để nó không xây dựng dự án của tôi trừ khi tôi có cài đặt phù hợp (kể từ khi sử dụng git):

Chạy Script được đặt sau Dependencies (sử dụng / bin / ksh làm shell):

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

EDIT: đã thêm các kiểm tra cho sự tồn tại của tệp mới và sao chép các tệp cũ vào / tmp để giải quyết nhận xét của @naomik bên dưới.


Hãy cẩn thận khi đăng bản sao và dán câu trả lời soạn sẵn / nguyên văn cho nhiều câu hỏi, những câu hỏi này có xu hướng bị cộng đồng đánh dấu là "spam". Nếu bạn đang làm điều này thì điều đó thường có nghĩa là các câu hỏi trùng lặp, vì vậy hãy gắn cờ chúng như vậy: stackoverflow.com/questions/7548158 , stackoverflow.com/questions/3225862 , stackoverflow.com/questions/7924937
Kev

1
Đây là một cơn ác mộng. Nếu ai đó chạy tập lệnh này trước khi hiểu rằng khóa id_rsaid_rsa.pubkhóa của họ sẽ bị xóa, họ có thể bị khóa khỏi điều khiển từ xa.
Cảm ơn bạn

@naomik đã cập nhật tập lệnh để kiểm tra các tệp mới trước và để lưu các tệp cũ trong / tmp
David H

10

Câu trả lời này là dành cho người mới bắt đầu (không có git gurus) . Gần đây tôi có vấn đề này và có lẽ chỉ có tôi nhưng hầu hết các câu trả lời dường như đòi hỏi sự hiểu biết khá cao về git. Sau khi đọc một số câu trả lời tràn ngăn xếp bao gồm chuỗi này, đây là các bước tôi cần thực hiện để dễ dàng chuyển đổi giữa các tài khoản GitHub (ví dụ: giả sử hai tài khoản GitHub, github.com/personalgitHub.com/work ):

  1. Kiểm tra các khóa ssh hiện có: Mở Terminal và chạy lệnh này để xem / liệt kê cácls -al ~/.ssh
    tệpkhóa ssh hiện cóvới phần mở rộng.publà các khóa ssh của bạn để bạn có haitài khoảnchopersonalworktài khoản. Nếu chỉ có một hoặc không có, đã đến lúc tạo ra sự khôn ngoan khác bỏ qua điều này.

    - Tạo khóa ssh : đăng nhập vào github (acc cá nhân hoặc công việc.), Điều hướng đến Cài đặt và sao chép email liên quan.
    bây giờ quay trở lại Terminal và chạyssh-keygen -t rsa -C "the copied email", bạn sẽ thấy:

    Tạo cặp khóa rsa công khai / riêng tư.
    Nhập tệp để lưu khóa (/.../.ssh/id_rsa):


    id_rsa là tên mặc định cho khóa ssh được tạo sớm để sao chép đường dẫn và đổi tên mặc định, ví dụ: /.../.ssh/id_rsa_worknếu tạo cho tài khoản làm việc. cung cấp mật khẩu hoặc chỉ cần nhập để bỏ qua và, bạn sẽ đọc một cái gì đó như hình ảnh ngẫu nhiên của khóa là: và hình ảnh. làm xong.
    Lặp lại bước này một lần nữa cho tài khoản github thứ hai của bạn. Đảm bảo bạn sử dụng đúng địa chỉ email và tên khóa ssh khác (ví dụ id_rsa_personal) để tránh ghi đè.
    Ở giai đoạn này, bạn sẽ thấy hai phím ssh khi chạy ls -al ~/.sshlại.
  2. Liên kết khóa ssh với tài khoản gitHub: Bước tiếp theo là sao chép một trong các khóa ssh, chạy mã này nhưng thay thế tên khóa ssh của riêng bạn : pbcopy < ~/.ssh/id_rsa_work.pub, thay thế id_rsa_work.pubbằng tên bạn gọi là của bạn.
    Bây giờ khóa ssh của chúng tôi đã được sao chép vào khay nhớ tạm, hãy quay lại tài khoản github [Đảm bảo bạn đã đăng nhập vào tài khoản nếu khóa ssh bạn đã sao chép id_rsa_work] và điều hướng đến
    Cài đặt - Khóa SSH và GPG và nhấp vào nút Khóa SSH mới (không phải khóa GPG mới btw: D)
    cung cấp một số tiêu đề cho khóa này, dán khóa và nhấp vào Thêm khóa SSH. Bây giờ bạn đã thêm thành công khóa ssh hoặc nhận thấy nó đã ở đó, tất cả đều ổn (hoặc bạn gặp lỗi vì bạn đã chọn khóa GPG mới thay vìKhóa SSH mới : D).
  3. Liên kết khóa ssh với tài khoản gitHub : Lặp lại bước trên cho tài khoản thứ hai của bạn.
  4. Chỉnh sửa cấu hình git toàn cầu: Bước cuối cùng là đảm bảo tệp cấu hình toàn cầu nhận biết tất cả các tài khoản github (có thể nói).
    Chạy git config --global --editđể chỉnh sửa tệp toàn cầu này, nếu điều này mở vim và bạn không biết cách sử dụng nó, nhấn iđể vào chế độ Chèn, chỉnh sửa tệp như bên dưới và nhấn esc theo sau :wqđể thoát chế độ chèn:

    [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

Xong!, Bây giờ khi cố gắng đẩy hoặc kéo từ repo, bạn sẽ được hỏi tài khoản GitHub nào sẽ được liên kết với repo này và chỉ được hỏi một lần, cấu hình cục bộ sẽ nhớ liên kết này chứ không phải cấu hình toàn cầu để bạn có thể làm việc trên các repos khác nhau được liên kết với các tài khoản khác nhau mà không phải chỉnh sửa cấu hình toàn cầu mỗi lần.


Họ nên cho phép các thẻ cho câu trả lời, đây là cho hệ điều hành mac.
user4015990

5

Đơn giản hơn và dễ dàng sửa chữa để tránh nhầm lẫn ..

Để người dùng Windows sử dụng nhiều tài khoản git hoặc khác nhau cho các dự án khác nhau.

Các bước sau: Đi Bảng điều khiển và Tìm kiếm Trình quản lý thông tin xác thực. Sau đó, chuyển đến Trình quản lý thông tin xác thực -> Thông tin xác thực Windows

Bây giờ hãy xóa nút git: https // github.com trong Tiêu đề Thông tin chung

Điều này sẽ loại bỏ các thông tin hiện tại. Bây giờ bạn có thể thêm bất kỳ dự án nào thông qua git pull, nó sẽ hỏi tên người dùng và mật khẩu.

Khi bạn gặp bất kỳ vấn đề nào với tài khoản khác, hãy thực hiện quy trình tương tự.

Cảm ơn

tham khảo hình ảnh


4

chỉ cần tìm ra điều này cho Windows, sử dụng thông tin đăng nhập cho mỗi repo:

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

Các định dạng của thông tin. https://github.com . thông báo cho người trợ giúp thông tin URL cho thông tin đăng nhập. 'UseHttpPath' báo cho người quản lý thông tin sử dụng đường dẫn cho thông tin đăng nhập. Nếu useHttpPath bị bỏ qua thì trình quản lý thông tin xác thực sẽ lưu trữ một thông tin đăng nhập cho https://github.com . Nếu nó được bao gồm thì trình quản lý thông tin sẽ lưu trữ nhiều thông tin đăng nhập, đó là điều tôi thực sự muốn.


2

Tôi thấy viên ngọc này rất hữu ích: sshwitch

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

Nó giúp tắt các phím ssh. Hãy nhớ sao lưu mọi thứ trước!

Ngoài ra để đảm bảo rằng các xác nhận có địa chỉ email chính xác được liên kết với chúng, tôi đã đảm bảo rằng tệp ~ / .gitconfig có địa chỉ email thích hợp.


2

Bên cạnh việc tạo nhiều Khóa SSH cho nhiều tài khoản, bạn cũng có thể xem xét để thêm cộng tác viên trên mỗi dự án bằng cùng một email tài khoản và lưu trữ mật khẩu vĩnh viễn.

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

Tôi đã thiết lập nhiều tài khoản với các email khác nhau, sau đó đặt cùng một người dùng và email trên mỗi tài khoản với tư cách là một trong những cộng tác viên. Bằng cách này, tôi có thể truy cập vào tất cả tài khoản mà không cần thêm Khóa SSH hoặc chuyển sang tên người dùng khác và gửi email để xác thực.


2

Cách tiếp cận đơn giản và dễ hiểu nhất (IMHO) - không có tệp cấu hình nào quá rắc rối

Chỉ cần tạo một khóa ssh khác.

Giả sử bạn có tài khoản GitHub công việc mới, chỉ cần tạo khóa mới cho nó:

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

Bây giờ bạn nên có cái cũ và cái mới, để xem chúng, hãy chạy:

ls -al ~/.ssh

Bạn chỉ cần chạy ở trên một lần.

Từ giờ trở đi, mỗi khi bạn muốn chuyển đổi giữa hai thứ, chỉ cần chạy:

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

Để chuyển sang cái cũ, hãy chạy lại:

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

1

một cách khác dễ dàng hơn là sử dụng nhiều ứng dụng máy tính để bàn, như những gì tôi đang làm, sử dụng tài khoản A trên máy tính để bàn Github, trong khi sử dụng tài khoản B trên Github Kraken



1

Trong trường hợp bạn không muốn gây rối với ~/.ssh/configtệp được đề cập ở đây, thay vào đó bạn có thể chạy git config core.sshCommand "ssh -i ~/.ssh/custom_id_rsa"trong repo nơi bạn muốn cam kết từ một tài khoản khác.

Phần còn lại của thiết lập là như nhau:

  1. Tạo khóa SSH mới cho tài khoản thứ hai với ssh-keygen -t rsa -f ~/.ssh -f ~/.ssh/custom_id_rsa

  2. Đăng nhập vào github bằng tài khoản khác của bạn, truy cập https://github.com/sinstall/keys và dán nội dung của~/.ssh/custom_id_rsa.pub

  3. Đảm bảo bạn đang sử dụng SSH thay vì HTTPS dưới dạng url từ xa: git remote set-url origin git@github.com:upstream_project_teamname/upstream_project.git


0

Bạn không phải duy trì hai tài khoản khác nhau cho cá nhân và công việc. Trên thực tế, Github khuyên bạn nên duy trì một tài khoản và giúp bạn hợp nhất cả hai.

Theo liên kết dưới đây để hợp nhất nếu bạn quyết định không cần duy trì nhiều tài khoản.

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


0

Không giống như các câu trả lời khác, nơi bạn cần làm theo vài bước để sử dụng hai tài khoản github khác nhau từ cùng một máy, đối với tôi, nó hoạt động theo hai bước .

Bạn chỉ cần:

1) tạo cặp khóa công khai và riêng tư SSH cho mỗi tài khoản của bạn dưới ~/.sshvị trí có tên khác nhau và

2) thêm các khóa công khai được tạo vào tài khoản tương ứng trong Settings>> SSH and GPG keys>>New SSH Key .

Để tạo cặp khóa công khai và riêng tư SSH, hãy sử dụng lệnh sau:

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"

Do các lệnh trên id_rsa_WORKid_rsa_WORK.pubcác tệp sẽ được tạo cho tài khoản công việc của bạn (ví dụ: git.work.com) id_rsa_PERSONALid_rsa_PERSONAL.pubsẽ được tạo cho tài khoản cá nhân của bạn (ví dụ: github.com).

Sau khi tạo, sao chép nội dung từ mỗi *.pubtệp công khai ( ) và thực hiện Bước 2 cho từng tài khoản.

PS : Không cần thiết phải tạo một mục nhập máy chủ cho mỗi tài khoản git trong ~/.ssh/configtệp như được đề cập trong các câu trả lời khác, nếu tên máy chủ của hai tài khoản của bạn là khác nhau.


Làm thế nào để bạn chuyển đổi giữa hai tài khoản tại PC địa phương của bạn?
user4015990

1
Không cần phải chuyển đổi. Bất cứ khi nào bạn sao chép một repo tại địa phương, thông tin tài khoản sẽ được lưu bởi git trong repo cục bộ của bạn. Vì vậy, bất cứ khi nào bạn thực hiện git đẩy hoặc kéo bên trong repo cục bộ đó, cấu hình trên sẽ phát hiện tài khoản nào cần xem xét.
Sahil Chhabra

0

Nếu bạn tình cờ cài đặt WSL, bạn có thể có hai tài khoản git riêng biệt - một trên WSL và một trong windows.


0

Bạn nên và không được đẩy vào dự án với một số thông tin chung. Sau khi bắt đầu trên một máy mới, hãy sử dụng các bước sau để thiết lập và sử dụng chính xác thông tin đăng nhập gitlab của bạn:

  • tạo các phím ssh pubic / private trên máy
  • sao chép dán khóa công khai vào giao diện gitlab / github ui (bất kỳ ai gợi ý cách thực hiện thông qua dòng cmd sẽ nhận được bia miễn phí ...)
  • đảm bảo bạn sao chép repo qua git chứ không phải url http
  • đặt bí danh git để tránh gõ liên tục cùng một tiền tố vào lệnh git
  • trong quá trình cam kết LUÔN LUÔN sử dụng cờ tác giả và e-mail
  • sử dụng git như bình thường bạn sẽ làm điều đó

Tất cả điều này như sau:

 # 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. Điều hướng đến thư mục mà bạn muốn đẩy các thay đổi của mình sang một tài khoản GitHub khác.
  2. Tạo khóa SSH mới trong dòng thiết bị đầu cuối / lệnh của bạn.

    ssh-keygen -t rsa -Cập email của bạn-địa chỉ email

  3. Sau đây sẽ hiển thị:

    Tạo cặp khóa rsa công khai / riêng tư. Nhập tệp để lưu khóa (/home/your_username/.ssh/id_rsa):

Sao chép và dán đường dẫn theo sau là tên nhận dạng cho tệp:

/home/your_username/.ssh/id_rsa_personal

4) Sau đó nó sẽ hỏi bạn những điều sau:

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

5) Bây giờ bạn có thể nhập lệnh sau để xem tất cả các khóa SSH bạn có trên máy cục bộ của mình:

ls -al ~/.ssh

Bạn sẽ có thể thấy tệp khóa SSH mới của mình. Như bạn có thể thấy trong cái tôi có cả id_rsa_test và 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) Tiếp theo, bạn cần sao chép khóa SSH được lưu trữ trong tệp id_rsa_personal.pub. Bạn có thể mở cái này trong trình soạn thảo văn bản bạn chọn. Tôi hiện đang sử dụng nguyên tử vì vậy tôi đã mở tệp bằng lệnh sau:

atom ~/.ssh/id_rsa_personal.pub

Sau đó, bạn sẽ nhận được một cái gì đó tương tự như thế này:

Tê-khê-a-a-c A-c A-c c c c c c c c c c c c c c c c c c c C C C C C T C C C C C C C C C C C C B C C B C Ba Ba Ba

7) Sao chép này và điều hướng đến tài khoản GitHub của bạn → Cài đặt → Khóa SSH và GPG 8) Nhấp vào Khóa SSH mới. Sao chép chìa khóa, đặt tiêu đề và thêm nó. 9) Thêm khóa từ thiết bị đầu cuối

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

10) Cấu hình người dùng và mật khẩu.

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

11) Chúng tôi sẵn sàng cam kết và thúc đẩy ngay bây giờ.

git init
git add .
git commit 
git push

0

Nếu bạn đã tạo hoặc nhân bản một kho lưu trữ khác và bạn không thể lấy originhoặc upstreamthêm khóa ssh tại thư mục đó bằng cách sử dụng lệnh sau đây.

Đây là lỗi tôi đã nhận được ở đây:

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.

Tôi đã sử dụng lệnh sau, điều này hoạt động:

ssh-add ~/.ssh/id_rsa_YOUR_COMPANY_NAME

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.