Câu trả lời:
Tôi tìm thấy một cách có vẻ tốt hơn cho tôi:
ssh-keygen -y -f <private key file>
lệnh đó sẽ xuất khóa chung cho khóa riêng đã cho, do đó chỉ cần so sánh đầu ra với mỗi tệp * .pub.
id_rsa.pub.blahhost
tệp và tôi không biết cái nào khớp với id_rsa
khóa riêng đơn lẻ và tôi đang thiết lập scp không mật khẩu để tôi có thể di chuyển khỏi các trang web cũ. Tạo một cặp khóa mới không phải là một lựa chọn; Tôi đã cài đặt chìa khóa của mình tốt và sẽ không làm hỏng nó.
Tôi luôn so sánh hàm băm MD5 của mô đun bằng các lệnh sau:
Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5
CSR: openssl req -noout -modulus -in server.csr | openssl md5
Nếu băm khớp nhau, thì hai tệp đó đi cùng nhau.
Đối với khóa DSA, sử dụng
openssl dsa -pubin -in dsa.pub -modulus -noout
để in các khóa công khai, sau đó
openssl dsa -in dsa.key -modulus -noout
để hiển thị các khóa chung tương ứng với khóa riêng, sau đó so sánh chúng.
Giả sử bạn có các khóa công khai bên trong các chứng chỉ x.509 và giả sử chúng là các khóa RSA, thì với mỗi khóa chung, hãy làm
openssl x509 -in certfile -modulus -noout
Đối với mỗi khóa riêng, hãy làm
openssl rsa -in keyfile -modulus -noout
Sau đó khớp các phím theo mô đun.
Việc kiểm tra có thể được thực hiện dễ dàng hơn với diff:
diff <(ssh-keygen -y -f <private_key_file>) <public key file>
Điều kỳ lạ duy nhất là diff không nói gì nếu các tệp giống nhau, vì vậy bạn sẽ chỉ được thông báo nếu công khai và riêng tư không khớp.
diff -s
diff -qs
trả về một câu trả lời đơn giản "giống hệt / không giống hệt nhau. (2) bạn nên xóa nhận xét trong tệp khóa công khai trước khi chạy khác biệt
Xóa các khóa công khai và tạo khóa mới từ khóa riêng. Giữ chúng trong các thư mục riêng biệt, hoặc sử dụng quy ước đặt tên để giữ cho chúng thẳng.
Nhập lệnh sau để kiểm tra xem khóa riêng và khóa chung có phải là tập hợp khớp (giống hệt) hay không phải là tập hợp khớp (khác nhau) trong thư mục $ USER / .ssh. Lệnh cắt ngăn không cho so sánh nhận xét ở cuối dòng trong khóa chung, chỉ cho phép so sánh khóa.
ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)
Đầu ra sẽ trông giống như một trong những dòng này.
Files - and /dev/fd/63 are identical
Files - and /dev/fd/63 differ
Tôi đã viết một tập lệnh shell mà người dùng sử dụng để kiểm tra quyền của tập tin ~ / .ssh / tập tin của họ và bộ khóa khớp. Nó giải quyết những thách thức của tôi với các sự cố người dùng thiết lập ssh. Nó có thể giúp bạn. https://github.com/BradleyA/docker-security-infr Hạ tầng / trip / master / shsh
Lưu ý: Câu trả lời trước của tôi (vào tháng 3 năm 2018) không còn hoạt động với các bản phát hành mới nhất của openssh. Câu trả lời trước: diff -qs <(ssh-keygen -yf ~ / .ssh / id_rsa) <(cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)
Mã hóa một cái gì đó bằng khóa chung và xem khóa riêng nào giải mã nó.
Bài viết dự án mã này không ai khác ngoài Jeff Atwood thực hiện một trình bao bọc đơn giản hóa xung quanh các lớp mật mã .NET. Giả sử các khóa này được tạo để sử dụng với RSA, hãy sử dụng lớp bất đối xứng với khóa chung của bạn để mã hóa và tương tự với khóa riêng của bạn để giải mã.
Nếu nó không trả về gì, thì chúng khớp:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost