Git và SSH, khóa nào được sử dụng?


94

Giả sử .sshthư mục của bạn chứa 30 khóa (15 khóa riêng tư và 15 khóa công khai).

Ở đâu trong Git, người ta có thể kiểm tra cái nào được sử dụng để kết nối với một kho lưu trữ từ xa nhất định?


10
Ai bình chọn cho "gần gũi", câu hỏi này - có liên quan trực tiếp đến lập trình cho các câu hỏi lý do tương tự về GIT được phép ở đây
James Raitsev

1
Có thể cho rằng ... Đây thực sự là một câu hỏi siêu người dùng, vấn đề ở đây không phải là git, mà là nền tảng nó đang chạy. Bạn không thể kiểm tra "in git" cho vấn đề, vì git không quan tâm, nó chỉ liên quan đến cách bạn sử dụng ssh và cách nó được cấu hình. Bạn có sử dụng ssh-agent, bất kỳ loại hệ thống quản lý khóa nào, bạn sử dụng hệ điều hành nào, phiên bản nào, vân vân?
Arafangion

Câu trả lời:


67

Mục nhập sau trong .ssh/configtệp giải quyết vấn đề

  host git.assembla.com
  user git
  identityfile ~/.ssh/whatever

Trong trường hợp ~/.ssh/whateverlà một đường dẫn đến khóa riêng của bạn

Ngoài ra, người dùng và máy chủ có thể được chọn từ

git push git@git.assembla.com:repo_name.git
         ^__ ^_______________
         user host

vì vậy nếu tôi muốn sử dụng một khóa ssh khác cho một máy chủ khác, tôi sẽ lặp lại tương tự sau lần đầu tiên ?? Tệp danh tính có liên quan đến máy chủ đầu tiên trước nó không?
MikeSchem

ok, yea, nó có vẻ như đó là trường hợp cyberciti.biz/faq/...
MikeSchem

67

Thực thi ssh ở chế độ tiết, hay còn gọi là ssh -v user@host, sẽ in ra một lượng lớn thông tin gỡ lỗi, thông tin này cũng chứa thông tin chi tiết về tệp khóa mà nó đang cố gắng đăng nhập.

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 332
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

Bây giờ nếu bạn kết hợp điều này, với Bước 4 trong trang trợ giúp SSH của chính Git , ssh -vT git@github.comcó thể cho bạn câu trả lời.

Lưu ý: Bạn cũng có thể sử dụng công -itắc để thông báo cho ssh trong quá trình thực thi lệnh, tệp khóa nào sẽ sử dụng.



1
Bạn cũng có thể grep đầu ra lỗi tiêu chuẩn của lệnh ssh để tìm tệp khóa như sau: ssh -vv user@host 2> >(grep Offering)- điều này sẽ làm cho mọi thứ dễ dàng hơn. Tệp cuối cùng phải là khóa công khai. Ví dụ:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
Gianfranco P.

3
githubkhông giống với git.
ForeverWintr

9

Trừ khi nó được chỉ định trên .ssh/confignó, nó sẽ sử dụng tệp khóa riêng mặc định.

Tệp mặc định là ~/.ssh/id_rsahoặc ~/.ssh/id_dsahoặc ~/.ssh/identitytùy thuộc vào phiên bản giao thức.


Khi các khóa được thêm vào các máy chủ đã biết?
mountainLion

6

Tôi muốn nói rằng thiết thực nhất đối với sở thích của tôi sẽ là:

GIT_SSH_COMMAND='ssh -v' git …

tất nhiên, tùy thuộc vào hoàn cảnh, chỉ cần xuất nó sang môi trường của SHELL hiện tại, bạn sẽ không phải thêm nó theo cách thủ công mỗi lần. Sau đó, nó sẽ là theo cách này:

export GIT_SSH_COMMAND='ssh -v'
git …

- Như man gitgợi ý rằng có một số biến môi trường sẽ ảnh hưởng đến hoạt động của Git khi sử dụng SSH. Theo man sshbạn, bạn có thể nhận được một số thông tin gỡ lỗi khi triển khai -vtùy chọn (không chỉ mà còn, hãy xem hướng dẫn sử dụng nếu bạn muốn biết thêm).

phím nào được sử dụng?

Trong đầu ra, bạn sẽ thấy thông tin như…

debug1: Offering public key: …

… Đó là câu trả lời cho qn của bạn.


1
ĐÚNG. Đây phải là câu trả lời được chấp nhận. Để làm cho nó làm việc trên cửa sổ CMD (ugh), sử dụng: set GIT_SSH_COMMAND=ssh -v. Điều này giúp tôi tìm ra rằng ssh-config Inlcude-Path phải giống như thế này trên windows: Include /C/Users/YourUserName.ssh/configđể tạo ssh và do đó git sử dụng tệp cấu hình sau đó sử dụng ví dụ một HOST *mục nhập để chỉ định tệp nhận dạng mà git / ssh sử dụng.
icyerasor

5

gitchỉ sử dụng sshđể kết nối, nó sẽ sử dụng bất kỳ phím nào sshsẽ sử dụng để kết nối với máy chủ từ xa. Xem ~/.ssh/configtập tin để biết chi tiết; các hostkhối sử dụng IdentityFilechỉ thị để xác định khóa riêng để sử dụng. Trang chủ ssh_config(5)chứa đầy đủ chi tiết.


Hmm .. tệp không tồn tại trên hệ thống của tôi. Có nên không?
James Raitsev

1
@JAM Bạn đang sử dụng hệ điều hành nào? Ngoài ra, đôi khi các tập tin cấu hình là tại/etc/ssh/ssh_config

Tôi đang sử dụng MACOS. Tìm thấy /etc/ssh_configđó dường như là một tập tin đầy đủ các mục nhận xét
James Raitsev

@sarnold Bạn có thể ~/.ssh/configtự tạo .
xdazz

4

Điều này có thể là siêu lợi hại, nhưng sau khi chạy ssh -vT git@github.comnó cho tôi thấy nó đang kiểm tra /root/.sshcác phím, tôi đã mong đợi nó kiểm tra thư mục chính của tôi và sau đó tôi nhận ra rằng tôi đã đăng nhập với tư cách root!


Kỹ thuật này, trong số những sshcách thẩm vấn tương tự khác là những giải pháp chính xác. Cảm ơn.
eigenfield

1

Trên máy chủ từ xa, chỉnh sửa tệp sshd_config và thay đổi LogLevel từ INFO thành VERBOSE và khởi động lại ssh.

Bây giờ tệp nhật ký của bạn sẽ giữ dấu vân tay của khóa được sử dụng để xác thực từng người dùng.

Trên Ubuntu, các tệp này là:

/etc/ssh/sshd_config
/var/log/auth.log

nhưng chúng có thể khác nhau trên một bản phân phối khác. Chỉ cần google để biết vị trí của họ (một số sử dụng / var / log / secure chẳng hạn).

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.