Cấu hình SSH - cùng một máy chủ nhưng các khóa và tên người dùng khác nhau


31

Tôi đã thiết lập hai tài khoản GitHub, nhưng tôi không thể có khóa ssh để hoạt động chính xác. Tôi đã thử nhiều cấu hình khác nhau.


Host github_username1
    HostName github.com
    IdentityFile ~/.ssh/rsa_1
    User username1
Host github_username2
    HostName github.com
    IdentityFile ~/.ssh/rsa_2
    User username2

git push:

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Hoạt động cho tên người dùng1:

Host github.com
    HostName github.com
    IdentityFile ~/.ssh/rsa_1
    User username1
Host github.com
    HostName github.com
    IdentityFile ~/.ssh/rsa_2
    User username2

git push tại repo của username2:

ERROR: Permission to username2/repo.git denied to username1.
fatal: The remote end hung up unexpectedly

Tôi cũng đã thử git pushvới cả hai IdentityFileUsercài đặt dưới cùng Host. Đầu ra giống như với cấu hình cuối cùng.

Tôi nghĩ git tự động tìm kiếm Máy chủ "github.com" vì điều khiển từ xa là như vậy. Người ta nói rằng Host có thể là bất cứ thứ gì bạn muốn ( /programming//a/3828682 ). Có cách nào để thay đổi những gì Host từ ssh config nên sử dụng repo cụ thể không?

Sẽ thật lý tưởng nếu tôi có thể giải quyết điều này chỉ từ ~ / .ssh / config.

Câu trả lời:


44

Máy khách OpenSSH chỉ sử dụng Hostdòng làm định danh phần và mọi thứ khác là cài đặt. Nếu bạn kết nối với foo@bar.com, SSH sẽ không tìm kiếm " User foo"; nó sẽ chỉ tìm kiếm " Host bar.com".

Nói cách khác: Nếu bạn có " Host github_username2" trong cấu hình SSH, thì bạn phải sử dụng cùng một máy chủ trong điều khiển từ xa Git của bạn - github_username2, không phải git@github.com.

Tuy nhiên, đó không phải là nguyên nhân gây ra lỗi xác thực, trong trường hợp github.com, tên người dùnggit SSH phải là " " . Các máy chủ GitHub SSH chỉ xác định người dùng bằng khóa SSH của họ.


Một cấu hình SSH chính xác sẽ là:

Host github_username1
    Hostname github.com
    User git
    IdentityFile ~/.ssh/rsa_1
Host github_username2
    Hostname github.com
    User git
    IdentityFile ~/.ssh/rsa_2

Cấu hình Git:

[remote "origin"]
    url = git@github_username1:username2/repo.git

Lưu ý: Mặc dù tôi đã chỉ định gittên người dùng ở cả hai vị trí trong ví dụ của mình, nhưng nó chỉ phải được chỉ định một lần - git@trong URL Git sẽ được ưu tiên hơn User gittrong cấu hình SSH.


2
Trong một số trường hợp, bạn có thể cần phải thêm IdentitiesOnly=yesvào từng hostphần để đảm bảo ssh sẽ chỉ chọn tệp nhận dạng đã chọn và không mặc định / thử bất cứ điều gì khác ..
TCB13
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.