Cách sử dụng nhiều khóa ssh với các tài khoản và máy chủ khác nhau


21

Tôi có nhiều khóa ssh và tôi cũng có tài khoản trên bitbucket và github. Làm thế nào khi tôi sử dụng kéo nó cho tôi lỗi

:/var/www/proj$ git pull origin master
conq: repository access denied.
fatal: The remote end hung up unexpectedly

hoặc nếu tôi ssh trang web bitbucket, nó sẽ bị lỗi khóa công khai

:~$ ssh git@bitbucket.org
Permission denied (publickey).

Làm thế nào tôi có thể giải quyết vấn đề này và sử dụng các khóa khác nhau với các tài khoản khác nhau.


Câu trả lời:


21

Đây là tất cả được thu thập từ trang web và stackoverflow, hy vọng điều này sẽ giúp những người mới biết đến ssh

vì vậy bạn có thể có nhiều phím ssh

~/.ssh$ ls
yyy_id_rsa  yyy_id_rsa.pub  id_rsa  id_rsa.pub  known_hosts

Lưu ý: chúng ta cần thêm sau đó vào ssh-agent, có thể id_rsa sẽ được thêm vào vì vậy chúng ta cần thêm khóa riêng khác

~/.ssh$ ssh-add yyy_id_rsa

bây giờ chúng tôi đã thêm cả hai khóa ssh vào ssh-agent

chúng tôi có một cho bitbucket và một cho github

vì vậy chúng tôi tạo một tập tin cấu hình như thế này

~/.ssh$ nano config
Host bit-yyyuser bitbucket.org
Hostname bitbucket.org
IdentityFile ~/.ssh/yyy_id_rsa
User yyyuser

Host bit-xxxuser bitbucket.org
Hostname bitbucket.org
IdentityFile ~/.ssh/id_rsa
User xxxuser

Host git-xxxuser github.com
Hostname github.com
IdentityFile ~/.ssh/id_rsa
User xxxuser

Lưu ý: Tôi đang sử dụng 2 khóa khác nhau cho 2 tài khoản khác nhau trên bitbucket và một cho github.

Bây giờ chúng ta cần nói với kho git sử dụng máy chủ nào để tôi sẽ nhận được khóa ssh cụ thể cho tài khoản cụ thể đó

đổi git@bitbucket.orgyyyuser/yyyproject.gitsanggit@bit-yyyuser:yyyuser/yyyproject.git

vì vậy trong thư mục dự án và thêm url từ xa

/var/www/yyyproject$ git remote add bit git@bit-yyyuser:yyyuser/yyyproject.git

trong dự án khác

/var/www/xxxproject$ git remote add bitt git@bit-xxxuser:xxxuser/xxxproject.git

bây giờ bạn có thể sử dụng đẩy và kéo dễ dàng

:/var/www/yyyproject$ git pull bit master
From bit-yyyuser:yyyuser/yyyproject
 * branch            master     -> FETCH_HEAD
Already up-to-date.
:/var/www/yyyproject$

và một dự án khác

/var/www/xxxproject$ git push bitt ver1
To git@bit-xxxuser:xxxuser/xxxproject.git
 * branch            master     -> FETCH_HEAD
Already up-to-date.
:/var/www/xxxproject$ 

Bây giờ tôi không có dự án github trên máy cục bộ nên chúng tôi cần sao chép dự án nhưng chúng tôi cần thực hiện một chút thay đổi để url để sao chép

url của chúng tôi là như thế này

git@github.com:xxxuser/python.git

vì chúng ta phải sao chép nó bằng các khóa cụ thể, chúng ta chỉ cần thay đổi tên máy chủ với máy chủ mà chúng ta đã xác định

git@git-xxxuser:xxxuser/python.git

như được định nghĩa trong tập tin cấu hình

và bây giờ chúng ta có thể nhân bản

:/var/www/us$ git clone git@git-xxxuser:xxxuser/python.git
Cloning into 'python'...
remote: Counting objects: 75, done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 75 (delta 18), reused 62 (delta 8)
Receiving objects: 100% (75/75), 6.29 KiB, done.
Resolving deltas: 100% (18/18), done.
:/var/www/us$ 

chúng tôi đã xác định các khóa ssh khác nhau cho máy chủ khác nhau, một cho git và một cho bitbucket bây giờ hệ thống biết các khóa ssh nào sẽ được sử dụng với máy chủ nào.

Bây giờ chúng ta có thể dễ dàng kéo, đẩy.


Nếu URL git của tôi đang sử dụng https thì sao? Dù sao để làm việc trên đó?
Gelin Luo

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.