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_rsa
và điển hình id_rsa.pub
. Ngay bây giờ tree ~/.ssh
trô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 ~/.ssh
chú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/config
tệ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 mainuser
khó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 Host
tên chúng tôi thiết lập trong ~/.ssh/config
tệp của bạn . Điều đó kết nối chính xác git với tương ứng IdentityFile
và 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 Host
chúng tôi đã xác định trong ~/.ssh/config
tệ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.pub
khóa trước Host github.com
củ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
/ pull
vớ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 ~/.ssh
thư 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ó 700
và 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à ~/.ssh
thư mục của tôi trông như thế nào: Tôi có một .pem
khó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 .pem
cá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/config
tậ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_keys
tập tin
Chuyển đổi cặp id_rsa
/ id_rsa.pub
khó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-mainuser
và id_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.pem
tệp của mình , bạn có thể xóa tệp cũ github-mainuser
và github-mainuser.pub
tệ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==
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.