Skip to main content

Vượt qua giới hạn 1 deploy key của GitHub

GitHub cho phép gắn`SSH  deploy key` vào từng repo, giúp ta có thể clone repo đó về để deploy (cài đặt chạy thật). Thế nhưng mỗi key chỉ được gắn vào 1 repo duy nhất.
Đây là giới hạn rất khó chịu nếu trên 1 máy tính (máy chủ) bạn cần clone về nhiều hơn 1 repo.

Giải pháp tiêu chuẩn GitHub đưa ra là người dùng cần tạo 1 tài khỏan khác, gắn key vào, rồi add tài khỏan đó vào các repo. Như vậy tài khỏan này đóng vai trò như 1 người dùng bình thường, 1 key có thể clone nhiều repo. Xem thêm giải pháp này ở help của GitHub

Vậy nếu không tạo được tài khỏan (bạn không phải admin) thì làm sao có thể clone nhiều repo?
...
...
...

Đây là một giải pháp khá "hack", đòi hỏi có hiểu biết chi tiết về SSH, và hơi "không đẹp".

Trước tiên, cần biết rằng khi ssh sử dụng private key, SSH client sẽ thử lần lượt theo thứ tự sau:

(output của ssh XXX -vvv)
debug2: key: /home/hvn/.ssh/id_rsa (0x5627468940f0), agent
debug2: key: /home/hvn/.ssh/id_dsa ((nil))
debug2: key : /home/hvn/.ssh/id_ecdsa ((nil))
debug2: key: /home/hvn/.ssh/id_ed25519 ((nil))

Nó sẽ thử lần lượt các file key ở trên, theo thứ tự.
Các key khác nhau được tạo bằng các option khác nhau của `ssh-keygen -t`, mặc định là rsa -> tạo ra file id_rsa.

Vì giới hạn của GitHub là mỗi deploy key 1 repo, ta có 4 key ở đây, và có thể sử dụng cho 4 repo khác nhau... Vậy chỉ cần tạo ra đủ 4 key và add vào 4 repo khác nhau?

Như vậy là đúng, nhưng chưa đủ.
Vì khi chạy `git clone git@github.com...`, git sẽ dùng ssh, ssh tìm thấy key nào đầu tiên thì nó dùng key đó, vậy nên nó luôn dùng id_rsa (giả sử đã gắn vào repo A) nếu nó tồn tại. Vậy nên nó không bao giờ sử dụng id_dsa (găn vào repo B), và bạn không bao giờ clone được repo B về.

Dưạ vào cách họat động của ssh client, ta có thể "tạm thời" chuyển id_rsa đi, khi đó ssh sẽ tìm đến key tiếp theo (id_dsa) và ta sẽ lấy được repo B.

Tương tự, "tạm chuyển" các key đi chỗ khác, ta sẽ sử dụng được các loại key khác nhau - ứng với các repo khác nhau.

Cách làm này không đẹp, rất "hacky", chỉ giới hạn tới vài repo (bằng số lượng key khác loại) - nhưng là giải pháp hoạt động khi bạn không thể tạo một github account mới.

PS: GitLab không có giới hạn này, 1 deploy key có thể sử dụng trên nhiều repo.

Hết.
HVN at http://www.familug.org/ and http://pymi.vn

Đăng ký học #Python tại https://pymi.vn/
Nhập email vào http://invite.pymi.vn/ để nhận thư mời tham gia forum hỏi đáp Python, Django, Golang, Linux ...

Comments

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG