Các khóa SSH riêng tư / công khai của tôi ở đâu trên UNIX?


16

Tôi bắt đầu hiểu cách RSA và các hệ thống khóa công khai / riêng tư hoạt động và tôi đã tự hỏi nơi khóa SSH riêng tư và công khai của tôi được lưu trữ. Khi tôi đi đến thư mục chính của mình và tôi duyệt thư mục .ssh (cd .ssh), tôi chỉ thấy tệp "know_hosts" mà tôi đoán có chứa các khóa chung của các máy chủ SSH từ xa khác mà tôi biết.

Tôi có thể tìm thấy những chìa khóa này ở đâu? Tôi thậm chí còn không nhớ việc tạo chúng bằng cách này, nhưng vì tôi đã thiết lập các kết nối ssh trước đó, nên chúng phải ở đâu đó.

Tôi đang sử dụng OpenSSH_5.2p1 với MAC OS 10.6.

Cảm ơn!

Câu trả lời:


14

~/.ssh/id_rsa~/id_rsa.pubthường Nhưng nó không tuân theo việc ssh phải tạo một cặp và lưu chúng: về cơ bản, ssh sử dụng giao thức SSL, thiết lập khóa phiên sử dụng thuật toán trao đổi khóa Diffie / Hellman hoặc một số biến thể. Điều đó có nghĩa là bắt tay thiết lập kết nối sẽ tạo khóa phiên và loại bỏ nó khi phiên hoàn thành.

Đọc về thuật toán, nó khá tiện lợi: sử dụng toán học khá đơn giản, nó thiết lập một khóa được biết đến ở cả hai đầu của kết nối mà không bao giờ gửi khóa qua kết nối.


Điều đó có nghĩa là nếu tôi chưa bao giờ được yêu cầu tạo khóa SSH mà RSA chưa bao giờ được sử dụng? Nói cách khác, một số thuật toán bất đối xứng đã được sử dụng để chia sẻ khóa phiên, nhưng các khóa công khai / riêng tư tạm thời cho kết nối không được lưu trữ trên máy tính của tôi?

Điều đó hoàn toàn chính xác. Trên thực tế, mã hóa là đối xứng - thuật toán bất đối xứng không phù hợp để phát trực tuyến. Diffie-Hellman được sử dụng để tạo khóa phiên để mã hóa đối xứng. Thay vào đó, nếu bạn sử dụng cặp khóa chung / riêng, chúng sẽ được sử dụng trong một số bắt tay khác để tạo khóa phiên cho thuật toán đối xứng.
Charlie Martin

@mieli: Không. Chúng không bao giờ được tạo ra ngay từ đầu. publickeychỉ là một phương thức xác thực có thể có của nhiều người; nếu bạn chỉ cần đăng nhập bằng passwordhoặc keyboard-interactive, mật khẩu đã được gửi. (Lưu ý: Không nhầm lẫn khóa người dùng, khóa máy chủ và các khóa phiên.)
user1686

@grawity chúng tôi chủ yếu đồng ý ở đây nhưng hãy cẩn thận một chút. Trao đổi khóa Diffie-Hellman có liên quan đến RSA và các thuật toán mã hóa bất đối xứng khác và về cơ bản là không đối xứng, vì cả hai bên của trao đổi đều có "một nửa" thỏa thuận cuối cùng. Họ làm có hai phần của chìa khóa, và chìa khóa cuối cùng và quá trình chính xác để xây dựng nó sẽ bị loại bỏ vào cuối phiên. Tuy nhiên, chúng không phải là phần chung và riêng của một cặp RSA.
Charlie Martin

4

Các khóa ssh công khai và riêng tư của bạn thường được lưu trữ trong:

$HOME/.ssh/id_dsa     (private key)
$HOME/.ssh/id_dsa.pub (public key)

Hoặc chúng có thể id_rsaid_rsa.pubnếu bạn đã tạo khóa RSA chứ không phải khóa DSA (OpenSSH hỗ trợ cả hai biểu mẫu).

Nhưng thực tế là bạn đã thiết lập kết nối ssh trước đó không có nghĩa là bạn có khóa ssh. Nếu sshlệnh không thể tìm thấy khóa cá nhân của bạn, nó sẽ nhắc bạn nhập mật khẩu cho hệ thống từ xa. Điều này kém an toàn hơn so với sử dụng các phím.

Thông thường bạn nên tạo khóa riêng ssh của mình bằng cụm mật khẩu. Nếu bạn tạo nó mà không có cụm mật khẩu, ai đó lấy bản sao khóa riêng của bạn có thể mạo danh bạn. ssh-agentcho phép bạn sử dụng một khóa với cụm mật khẩu mà không cần phải nhập lại cụm mật khẩu của mình mỗi khi bạn sử dụng nó.


2

Nếu bạn không tạo ra một cặp khóa, có lẽ bạn không .

Lưu lượng SSH2 được mã hóa bằng khóa phiên đối xứng được thiết lập bằng thuật toán DH, ECDH hoặc trao đổi khóa GSSAPI. Cả khóa máy chủ lẫn khóa người dùng đều không được sử dụng để mã hóa dữ liệu - mục đích duy nhất của họ là xác thực .

Bây giờ hãy nhớ rằng SSH hỗ trợ một số phương thức xác thực: ngoài ra publickey, hầu hết tất cả các máy chủ đều chấp nhận đơn giản passwordvà / hoặc keyboard-interactive, trong đó không có quá trình tạo hoặc sử dụng khóa nào diễn ra - mật khẩu chỉ được gửi đến máy chủ từ xa để xác minh.

Nói cách khác, "vì tôi đã thiết lập các kết nối ssh trước đó, chúng phải ở đâu đó" là không chính xác - không cần thiết phải có khóa người dùng để thiết lập kết nối.


Nếu bạn đã tạo một cặp khóa, nó có thể sẽ nằm trong ~/.ssh/id_*- ví dụ, id_rsađối với cặp khóa RSA mặc định, id_ecdsacho ECDSA, id_dsacho DSA. Mặc dù những tập tin này chứa cả phần tư nhân và công cộng của cặp khóa, phần nào thường được tự động giải nén vào phân vùng riêng cho id_*.pubtập tin để thuận tiện ( id_rsa.pubcho id_rsavà vân vâ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.