Làm thế nào là các khóa công khai mà Google đã gửi đến các máy chủ và các khóa riêng được sử dụng như thế nào để dùng cho SSH?


11

Có hai máy Linux, A và B. Scripts chạy trên Một nhu cầu để có thể SSH vào B. Vì vậy, A tạo ra một khóa công khai (có thể là một ssh-keygen-generated id_rsa.pub), và sau đó sử dụng khóa bí mật tương ứng của nó (một lần nữa, có lẽ id_rsa) để làm kết nối SSH đó.

Nếu bất cứ điều gì tôi nói ở trên là không chính xác hoặc sai, xin vui lòng bắt đầu bằng cách sửa cho tôi!

Giả sử tôi ít nhiều nhắm vào mục tiêu:

  • Làm thế nào để A cung cấp cho tôn B khóa công khai của nó ( id_rsa.pub)? Đây có phải là một quá trình thủ công, hoặc nó có thể được tự động hóa? Nếu thủ công, quá trình là gì? Nếu tự động, lệnh là gì? Khi B "lấy" khóa công khai này, nó sẽ đi đâu hoặc được lưu trữ ở đâu?
  • Khi bắt đầu kết nối SSH tới B, A sử dụng khóa riêng của nó như thế nào ( id_rsa) như một phần của kết nối đó?

3
Tại sao các downvote sans giải thích? Nó cho thấy nghiên cứu, là một SSCCE , và theo hiểu biết của tôi, không phải là một bản sao. Nếu bạn không đồng ý và nghĩ rằng đây là một bản sao, vui lòng cung cấp một liên kết đến câu hỏi mà bạn cảm thấy đó là một bản sao!
dùng3178622

Mặc dù tôi không downvote và không nghĩ rằng câu hỏi này là xấu theo bất kỳ cách nào, có lẽ Stack bảo mật thông tin sẽ là một nơi phù hợp hơn.
MC10

3
Tôi cũng không bỏ phiếu, nhưng tôi hiểu tại sao ai đó làm vậy. Đây là một phương thức đăng nhập được sử dụng rộng rãi, trong khi tôi đồng ý rằng kết quả tìm kiếm của Google rất lộn xộn với cách làm cho nó hoạt động chứ không phải cách nó hoạt động bài viết .. Có thể tìm thấy thông tin mà bạn đang tìm kiếm.
Tyson

5
Khái niệm SSCCE không thực sự áp dụng cho các câu hỏi không liên quan đến mã.
Scott

2
Không phải là một bản sao nhưng có liên quan: superuser.com/questions/383732/how-does-ssh-encoding-work . Có thể trả lời phần thứ hai của câu hỏi (cách sử dụng khóa riêng)
Jay

Câu trả lời:


5

ssh-keygentạo cả khóa công khai và khóa riêng, ban đầu chỉ cư trú cục bộ. Đưa khóa công khai cho một máy chủ khác là việc mà người dùng cần thực hiện thủ công, bằng cách gửi nó cho người chịu trách nhiệm cho máy chủ B hoặc nếu bạn có tài khoản có mật khẩu, bạn có thể đăng nhập và tự đặt nó vào đó. Để cho phép đăng nhập không mật khẩu vào máy chủ B, bạn cần thêm khóa công khai vào tệp ~ / .ssh / ủy quyền trên máy chủ B (một khóa chung trên mỗi dòng, có thể có bất kỳ số khóa nào trong tệp này). Có một lệnh linux ssh-copy-idsẽ sao chép ID cho bạn và đặt nó vào tệp.

Theo mặc định, ssh sẽ sử dụng tệp ~ / .ssh / id_XXX làm khóa riêng của bạn. XXX có thể là rsa, dsa hoặc bất kỳ giao thức nào tạo khóa. IIRC, dsa đã cũ và không nên sử dụng. Nếu bạn muốn sử dụng một khóa riêng khác, bạn có thể chỉ định nó trong lệnh ssh bằng cách sử dụng -i. Miễn là khóa riêng được sử dụng khớp với khóa chung trên máy từ xa (trong tệp ủy quyền cho tài khoản người dùng mà bạn đang đăng nhập), thì bạn sẽ không cần cung cấp mật khẩu.


Cảm ơn @BamaPookie - một vài phần tiếp theo: (1) khi ssh-keygenđược chạy, bạn có đề cập đến việc hai khóa "chỉ cư trú cục bộ" không? Ở đâu?!? Như trong, thư mục nào tôi có thể điều hướng đến và xem id_rsa.pubid_rsa? (2) Tôi nghĩ ssh-addlà lệnh để thêm khóa công khai vào authorized_keys, phải không? Sự khác biệt giữa ssh-copy-idvà là ssh-addgì? Cảm ơn một lần nữa!
dùng3178622

2
@ user3178622 re '1' Tôi không có nó trước mặt nhưng có vẻ như ~/.ssh/id_rsa '2', ssh-add không phải để thêm vào Author_keys, đó là để thêm vào một móc khóa .. Tôi chưa sử dụng ssh - dù vậy ssh-add là để làm cho bạn không phải nhập cụm từ khóa mỗi khi bạn sử dụng khóa yêu cầu cụm từ khóa. Vì vậy, nếu các khóa ssh của bạn không yêu cầu cụm từ khóa thì tôi đoán không có lý do nào để sử dụng ssh-add và tôi nghĩ bạn vẫn cần sử dụng ssh-copy-id hoặc thực hiện sao chép thủ công khóa công khai vào ủy
quyền_key

2
ssh-keygen sẽ hỏi bạn nơi lưu tệp, nhưng vị trí mặc định nằm trong ~ / .ssh / ssh-copy-id sao chép khóa chung vào máy chủ từ xa. ssh-add thêm một khóa riêng vào khóa cục bộ của bạn. Thêm khóa riêng vào khóa cục bộ của bạn có nghĩa là nó sẽ được kiểm tra theo mặc định khi thử kết nối ssh (nghĩa là không phải chỉ định nó bằng -i).
BamaPookie

1
@BamaPookie Nơi bạn viết "Thêm khóa riêng vào khóa cục bộ có nghĩa là nó sẽ được kiểm tra theo mặc định khi thử kết nối ssh (nghĩa là không cần chỉ định nó bằng -i)." <--- Thật đáng để làm rõ rằng Tôi nghĩ bạn có nghĩa là nó thay đổi khóa riêng mặc định đã được chọn, vì vậy thay vì nó là id_rsa, thì đó là từ khóa. (Tất nhiên, không có ssh-add, bạn vẫn không phải chỉ định khóa riêng với -i, nó vẫn sẽ có mặc định, chỉ là một mặc định khác).
barlop

3

Có hai máy Linux, A và B. Tập lệnh chạy trên A cần có khả năng SSH vào B. Vì vậy, A tạo khóa công khai (có thể là id_rsa.pub do ssh-keygen tạo), sau đó sử dụng khóa riêng tương ứng ( một lần nữa, có lẽ là id_rsa) để tạo kết nối SSH đó.

Nếu bất cứ điều gì tôi nói ở trên là không chính xác hoặc sai, xin vui lòng bắt đầu bằng cách sửa cho tôi!

Giả sử tôi ít nhiều nhắm vào mục tiêu:

vâng

nhưng B cần khóa công khai của A để được liệt kê trong tệp ủy quyền của B để A có thể kết nối với B

ngoài ra, bạn có thể xóa id_rsa.pub và ssh sang B và nó vẫn hoạt động, vì khóa chung được tạo mới với mỗi kết nối ssh và không được lưu trữ trong bất kỳ id_rsa.pub nào

Làm thế nào để A cung cấp cho tôn B khóa công khai của nó (id_rsa.pub)? Đây có phải là một quá trình thủ công, hoặc nó có thể được tự động hóa? Nếu thủ công, quá trình là gì? Nếu tự động, lệnh là gì?

hướng dẫn sử dụng - một cái gì đó như

từ A-

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

hoặc thậm chí nhiều hơn bằng tay, để phá vỡ lệnh

Một đô la cat id_rsa.pub | ssh user@host 'cat>~/a.a'

sau đó vào B, đảm bảo ~ / .ssh tồn tại rồi làm cat a.a >> ~/.ssh/authorized_keys

và bạn có thể cat ủy quyền_key của B trước và sau để đảm bảo khóa được liệt kê.

Hoặc bạn có thể gửi email id_rsa.pub đến một tài khoản email, sau đó từ B, B có thể kiểm tra email và nối các nội dung của id_rsa.pub vào tệp ủy quyền của anh ấy

tự động

Lệnh ssh-copy-id

Bạn cần có khả năng ssh in, vì vậy bạn cần truy cập mật khẩu

Thay vì làm ssh user @ host, bạn làm ssh-copy-id user @ host và bạn được nhắc nhập mật khẩu, bạn nhập nó, bạn vào, nó sẽ sao chép khóa chung. Và lần tới khi bạn làm ssh user @ host thì nó sẽ sử dụng khóa.

Khi B "lấy" khóa công khai này, nó sẽ đi đâu hoặc được lưu trữ ở đâu?

B's ~ / .ssh / ủy quyền

Khi bắt đầu kết nối SSH với B, A sử dụng khóa riêng của nó (id_rsa) như thế nào trong kết nối đó?

tốt, tôi không biết nhiều về điều đó, ngoài đỉnh đầu của tôi, nhưng bất cứ điều gì được mã hóa bằng một khóa này đều có thể được giải mã bằng khóa kia và nhận dạng chính bạn có một chút khác biệt với việc gửi dữ liệu .. và có thể có điều gì đó về một chìa khóa tạm thời quá.


Cảm ơn @barlop! Xin vui lòng xem câu hỏi của tôi bên dưới câu trả lời của BamaPookie; Tôi có cùng câu hỏi cho bạn!
dùng3178622
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.