Sử dụng khóa chuyển tiếp cụ thể từ tác nhân SSH?


30

Giả sử tôi có một khóa cho Github, cùng với các khóa khác. Tôi đã thêm rất nhiều khóa vào đại lý ssh của mình ( ssh-add -Ltrả về nhiều dòng) trong máy tính ở nhà của tôi A. Trong tôi .ssh/configđã thiết lập khóa nào để sử dụng với máy chủ nào, ví dụ:

ssh -T -vvv git@github.com 2>&1 | grep Offering

cho

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

Chỉ có một chìa khóa được cung cấp, như mong đợi. Nhưng sau đó ssh-ing đến một số máy chủ B với ForwardAgent yesvà lặp lại cùng một lệnh, tôi nhận được

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.linode2
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.helium
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

có nghĩa là nó thử tất cả các phím của tôi. Đây là vấn đề vì chỉ có thể thử một số lượng khóa hạn chế trước khi máy chủ quay trở lại Too many authentication failures. Vì vậy, tôi đã cố gắng chỉnh sửa .ssh/configtrên máy chủ B để bao gồm

Host github.com
  IdentityFile /Users/doxna/.ssh/id_rsa.github
  IdentitiesOnly yes

nhưng sau đó tôi không nhận được các dịch vụ quan trọng, mà là

debug2: key: /Users/doxna/.ssh/id_rsa.github ((nil))

mà tôi đoán có nghĩa là không tìm thấy khóa (?) Và sau tất cả, khóa được đặt tại máy tính ở nhà của tôi A, không phải máy chủ B, vậy câu hỏi đặt ra là làm thế nào để tham khảo nó tại máy chủ B? Hy vọng tôi quản lý để giải thích câu hỏi.

Câu trả lời:


28

Bạn đã có ý tưởng đúng. Phần duy nhất bạn thiếu là tập tin được trỏ đến IdentityFilephải tồn tại. Không cần chứa khóa riêng, chỉ cần có khóa công khai là đủ.

Trên máy chủ B, bạn có thể trích xuất khóa chung từ tác nhân bằng cách nhập ssh-add -L | grep /Users/doxna/.ssh/id_rsa.github > ~/.ssh/id_rsa.github.pubvà sau đó trỏ đến tệp đó từ~/.ssh/config


FYI tên khóa công khai không quan trọng. Nó sẽ chọn khóa thích hợp từ đại lý dựa trên nội dung.
akostadinov

@akostadinov Đúng. Nếu bạn trỏ sshđến tệp khóa công khai không có tệp khóa riêng được liên kết, thì chỉ cần đọc khóa chung từ tệp và yêu cầu tác nhân sử dụng khóa riêng tương ứng để tạo chữ ký.
kasperd

Điều này có hiệu quả lưu chìa khóa của bạn trên máy chủ B! Xem câu trả lời dưới đây của @ mc0e để biết giải pháp không lưu khóa trên máy chủ.
Pitt

2
@Pitt Không, không. Nó chỉ lưu trữ khóa công khai . Và đó không phải là vấn đề vì khóa công khai không bao giờ được dự kiến ​​sẽ được giữ bí mật ngay từ đầu. Chuyển tiếp tác nhân cung cấp cho máy chủ quyền truy cập để sử dụng khóa miễn là chuyển tiếp tác nhân được thực hiện, nhưng tác nhân sẽ không bao giờ gửi khóa bí mật ở bất cứ đâu.
kasperd

@kasperd bạn không cần một bản sao thực sự của khóa riêng trong khi bạn có kết nối trực tiếp với tác nhân người dùng với khóa. Khi root, bạn có thể truy cập các kết nối đại lý của người dùng đã đăng nhập khác.
mc0e

5

Câu trả lời hay từ @Kasperd, nhưng cũng lưu ý rằng nếu Máy chủ B bị xâm phạm hoặc nếu bạn không tin tưởng tất cả những người có quyền root, thì bạn vẫn để lộ tất cả các khóa của mình để lạm dụng miễn là bạn đã đăng nhập trong máy chủ đó.

Vì vậy, một cách tiếp cận tốt hơn có thể là chỉ chuyển tiếp truy cập vào các phím bạn cần. Có thể thử ssh-agent-filtertrong kho lưu trữ debian / Ubuntu hoặc từ github .

EDIT: Tôi đã giải quyết ssh-identthay vì ssh-agent-filterchọn các phím chuyển tiếp, mặc dù đó không phải là một trải nghiệm suôn sẻ như người ta có thể hy vọng.


1
Từ nhận xét của @ kasperd về câu trả lời của anh ấy: "không. Nó chỉ lưu trữ khóa công khai. Và đó không phải là vấn đề vì khóa công khai không bao giờ được giữ bí mật ở nơi đầu tiên. Chuyển tiếp đại lý cho phép chủ nhà truy cập vào sử dụng khóa miễn là có chức năng chuyển tiếp đại lý, nhưng đại lý sẽ không bao giờ gửi khóa bí mật ở bất cứ đâu "
Bdoserror

1
@Bdoserror Là root, bạn có thể lạm dụng kết nối ssh-agent trong khi người dùng được đăng nhập. Bạn chỉ cần sao chép các SSH_*biến môi trường và đăng nhập vào bất cứ nơi nào bạn muốn sử dụng khóa, mặc dù chưa có bản sao thực sự.
mc0e ngày

Để làm rõ: câu trả lời này thực sự sai - trong khi kịch bản lạm dụng từ mc0e là có thật, nó không liên quan gì đến việc lưu khóa chung - nếu máy chủ trung gian bị xâm phạm, kết nối đại lý của bạn có thể được sử dụng để xác thực với khóa riêng của bạn, bất kể cho dù bạn có lưu khóa công khai trên máy chủ trung gian hay không. Khóa riêng của bạn sẽ không bị xâm phạm và việc lưu khóa chung sẽ không dễ dàng hơn, vì bất kỳ kẻ tấn công nào có kết nối với đại lý đều có thể yêu cầu khóa công khai.
Phục hồi

@ marc-lehmann đọc lại những gì tôi đã viết. Nếu bạn chuyển tiếp các phím thì chúng sẽ bị lộ, nhưng bạn có thể giới hạn các phím nào được chuyển tiếp.
mc0e

Tôi bước đi những gì bạn đã viết - xin vui lòng giải quyết nội dung bình luận của chúng tôi, không phải người. Vấn đề là câu trả lời của bạn đơn giản là sai bởi vì nó giả sử, khi bạn viết, các phím "được chuyển tiếp" đến máy chủ từ xa. Không có điều đó xảy ra, và các phím không được tiếp xúc.
Phục hồi
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.