Chính xác những gì ssh gửi khi thực hiện đàm phán quan trọng?


10

Khi chỉ định rõ ràng tệp nhận dạng cho ssh:

ssh -i ./id_rsa ...

Tôi có những dòng này trong dấu vết gỡ lỗi ssh:

debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply

Điều đó có nghĩa là ssh-tạo id_rsacó chứa số mũ RSA công khai không? id_rsađịnh dạng dường như khá rõ ràng rằng nó chứa khóa riêng với khối "BEGIN PRIVATE KEY" của nó, vì vậy "cung cấp khóa chung" phải có nghĩa gì đó ngoài "gửi khóa chung tới máy chủ".

BIÊN TẬP:

Để làm rõ, tôi muốn biết chính xác những gì đang diễn ra đằng sau dòng "cung cấp khóa công khai". Nếu máy khách giữ nhiều khóa, tất cả chúng sẽ được cung cấp cho máy chủ từng cái một.


Để thêm vào vấn đề đó, có một phương pháp để máy chủ kiểm tra xem chúng tôi có nhận được khóa tốt trước thử thách hay không. Bởi vì tôi đã có một máy chủ từ chối khóa của chúng tôi trước khi tôi không giải mã được. Các lỗi ở đó vì tên không được chỉ định tốt.
Gopoi

Câu trả lời:


12

để kết nối với máy chủ SSH và xác thực với khóa công khai / riêng tư của bạn, trước tiên bạn phải chia sẻ khóa chung của mình với máy chủ.

này được thực hiện bằng cách sao chép khóa công cộng để khóa riêng của bạn đến máy chủ, và thêm nó vào ~/ssh/authorized_keysbằng cách sao chép / dán, sao chép id_rsa.pubđể ~/.ssh/authorized_keystrên máy chủ hoặc với cat id_rsa.pub >> ~/.ssh/authorized_keys, phụ thêm nó vào danh sách.

Khi bạn kết nối, máy chủ sẽ sử dụng khóa chung của bạn để ký một thử thách và khách hàng của bạn sử dụng khóa riêng của bạn id_rsađể giải mã thử thách, mã hóa lại với công khai của máy chủ host keyvà gửi lại.

máy chủ xác minh rằng bạn đã giải mã đúng thách thức, bằng cách giải mã phản hồi của bạn bằng khóa riêng và máy khách / máy chủ thiết lập kết nối được mã hóa, dựa trên dữ liệu được chia sẻ, không phải trên khóa chung / riêng của bạn.

tại KHÔNG ĐIỂM trong trao đổi là khóa riêng của bạn hoặc khóa riêng của chủ nhà được trao đổi hoặc tiết lộ cho nhau. Khóa công khai của bạn được lưu trữ trên máy chủ, nhưng đó là lý do tại sao đó là khóa CÔNG CỘNG.


Vâng, đó là tất cả tốt và tốt, nhưng tất cả điều này xảy ra trước khi máy chủ xác định khóa công khai để mã hóa thách thức. Tôi có một số khóa và tất cả chúng đều được "cung cấp" cho máy chủ từng cái một. Chính xác thì điều đó đòi hỏi gì? Và vâng, tôi nhận ra khóa riêng không thực sự được gửi, có lẽ tôi nên xóa dòng đó khỏi câu hỏi hoàn toàn. : P
Alex B

khi bạn chỉ định ssh -i keynamebạn đang nói với khách hàng ssh của mình chính xác khóa MÀ bạn dự định sử dụng để kết nối với máy chủ. nếu bạn có một tá khóa trong ~/.ssh/máy khách của bạn sẽ KHÔNG lặp qua từng khóa. nó sẽ tìm kiếm ~/.ssh/id_rsa, ~/.ssh/id_dsacó khả năng một vài tên tệp khác được mã hóa vào máy khách hoặc khóa nào được chỉ định cho máy chủ đó trong ~/.ssh/config... câu chuyện dài; khách hàng của bạn không / cung cấp / bất kỳ khóa nào cho máy chủ.
cpbills

khi bạn kết nối, / client / decry của bạn sẽ giải mã thử thách từ máy chủ và sau đó rơi vào danh sách các khóa riêng cục bộ được tiêu chuẩn hóa để mã hóa thử thách, để gửi phản hồi. NẾU phản hồi thách thức không thành công, nó / có thể / chuyển sang tên khóa được mã hóa cứng tiếp theo, mã hóa lại bằng / that / private private và thử lại. một lần nữa, khóa của bạn, công khai và riêng tư không / chia sẻ / với máy chủ khi xác thực đăng nhập.
cpbills

1
oh, tôi đọc lại bình luận của bạn; máy chủ: mã hóa thử thách với khóa máy chủ, máy khách: giải mã thử thách với khóa máy chủ, máy khách: mã hóa thử thách với khóa riêng, máy chủ: cố gắng giải mã thử thách với tất cả các khóa công khai được liệt kê trong ~/.ssh/authorized_keysmáy chủ biết thử thách là gì và nó đang tìm kiếm gì vì vậy, một khi khóa công khai mở khóa, nó sẽ biết sử dụng khóa đó.
cpbills

@cpbills, xin lỗi tôi đã quên đề cập đến tôi có một vài khóa từ một đại lý được chuyển tiếp, do đó nhiều khóa được cung cấp (nhật ký -vvv hiển thị tất cả chúng được cung cấp, mặc dù tôi chỉ định tệp nhận dạng).
Alex B

1

Mật mã khóa công khai / riêng dựa trên một hệ thống rất đơn giản:

Bạn có một khóa công khai có khả năng thực hiện mã hóa một chiều và một khóa riêng có khả năng khử nhiễu. Khóa công khai sau đó có thể được trao cho mọi người trên thế giới và không ai có thể giải mã dữ liệu được mã hóa của bạn, mặc dù họ SILL có thể mã hóa dữ liệu mà bạn có thể giải mã bằng khóa riêng của mình.

Vì vậy, câu trả lời cho câu hỏi của bạn là "Khóa công khai của bạn."


Vâng, cảm ơn, tôi biết chi tiết cách thức hoạt động của tiền điện tử khóa công khai, nhưng tôi muốn biết chi tiết cụ thể về giao thức SSH và định dạng khóa. Tôi muốn biết liệu nó có lưu trữ số mũ công khai trong tệp khóa riêng hay không? Đối với tất cả những gì tôi biết "cung cấp khóa công khai" cũng có thể có nghĩa là ký một nonce với khóa riêng của bạn, vì vậy máy chủ có thể tìm thấy khóa chung tương ứng.
Alex B

Đúng. nó không ssh-keygen -y sẽ cung cấp cho bạn khóa công khai của khóa riêng, ngược lại không hoạt động
Mâtt Frëëman

1

Tôi không nghĩ rằng nó thực sự nên gửi khóa công khai hoặc khóa riêng vào thời điểm này. Mã hóa phải được thực hiện bởi máy khách bằng khóa riêng trên bản rõ đã được máy chủ biết. Máy chủ lưu trữ có thể giải mã tin nhắn này bằng khóa chung, biết rằng người duy nhất có thể mã hóa nó đúng cách là máy khách giữ khóa riêng tương ứng, do đó xác thực ứng dụng khách.

Tôi tin rằng nó nói Offering public key: ./id_rsabởi vì nó sử dụng khóa riêng (được lưu trữ ./id_rsa) để thực hiện mã hóa trên bản rõ mà máy chủ biết và sau đó máy chủ sẽ sử dụng khóa chung để giải mã bản mã này và xác nhận rằng nó phù hợp với bản rõ. Tệp ./id_rsa.pubkhách hàng không bao giờ cần đến tệp khách hàng sau khi tạo khóa ban đầu. Điều này chỉ được sử dụng bởi máy chủ để giải mã.


Tôi đã nghi ngờ điều gì đó như thế này xảy ra, nhưng tôi muốn có một số chi tiết cụ thể (ví dụ: giao thức đàm phán khóa SSH thực tế). Không chắc chắn tại sao bạn bị hạ cấp.
Alex B

Xin lỗi câu trả lời của tôi rất sóng. Tôi không quen thuộc với các chi tiết cụ thể về đàm phán khóa SSH, chỉ các cuộc đàm phán chung cần thiết trong xác thực khóa công khai. Tôi có thể đã bị bỏ phiếu cho câu trả lời không cụ thể.
Trey Hunner
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.