Câu trả lời:
Tôi thích ssh-keygen -y -e -f <private key>
cách này thay vì câu trả lời được chấp nhận của Làm thế nào để bạn kiểm tra khóa DSA công khai / riêng tư? trên Stack Overflow.
ssh-keygen -y -e -f <private key>
lấy một khóa riêng và in khóa công khai tương ứng có thể được so sánh trực tiếp với các khóa chung có sẵn của bạn. (Gợi ý: hãy cẩn thận với các bình luận hoặc các tùy chọn chính.)
(Làm thế quái nào nó làm điều đó? Tôi chỉ có thể hy vọng khóa công khai được mã hóa trực tiếp hoặc gián tiếp trong khóa riêng ...)
Tôi cần điều này cho bản thân mình và sử dụng Bash one-liner sau đây. Nó sẽ không xuất ra gì nếu các khóa thuộc về nhau. Áp dụng một chút -q
cho diff trong script và diff chỉ đặt mã trả về một cách thích hợp.
PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )
ssh-keygen -y -e -f id_rsa
sẽ không kiểm tra id_rsa chút nào mà chỉ trả về giá trị từ id_rsa.pub. Vì vậy, ví dụ nếu bạn echo 5 > id_rsa
xóa khóa riêng, sau đó thực hiện tìm khác biệt, khác biệt sẽ vượt qua! Ngoài ra, chạy ssh-keygen -yef foo
ở nơi foo không phải là khóa hợp lệ (và không có foo.pub tương ứng) sẽ chặn chờ người dùng nhập liệu, vì vậy hãy cẩn thận khi sử dụng mã này trong tập lệnh.
Tùy thuộc vào nơi bạn nhận được tệp khóa công khai mà bạn đang kiểm tra, câu trả lời được chấp nhận có thể cho kết quả dương tính giả. Điều này là do hành vi được mô tả trong nhận xét của @drewbenn. Cụ thể, khi tùy chọn -e được sử dụng với tệp khóa riêng làm tham số tùy chọn -f, nó chỉ đơn giản là vẹt (nhưng định dạng lại) những gì trong tệp khóa chung được liên kết.
Nói cách khác,
ssh-keygen -y -f id_rsa
(dường như) tạo ra giá trị khóa chung và
ssh-keygen -y -e -f id_rsa
đơn giản và kết quả đầu ra (và định dạng lại) phím trong hiện id_rsa.pub bất cứ điều gì .
Trong trường hợp của tôi, tôi phải xác minh rằng cặp này chưa bị hỏng. Vì vậy, tôi quyết định so sánh như sau:
ssh-keygen -y -f id_rsa | cut -d' ' -f 2
với
cut -d' ' -f 2 id_rsa.pub
Vì thế:
diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)
Có lẽ điều này không linh hoạt, nhưng nó tốt hơn cho nhu cầu của tôi. Có lẽ nó giúp người khác.
Nếu chúng nằm trên hệ thống cục bộ id_rsa.pub
của bạn $HOME/.ssh/authorized_keys
, ssh
hãy localhost
sử dụng id_rsa
khóa và sử dụng khóa. Nếu nó hoạt động, sau đó họ phù hợp.
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
ssh -v
giúp rất nhiều