เข้ารหัสรหัสผ่านชั่วคราวโดยใช้กุญแจสาธารณะ ssh


9

ฉันจัดการสำนักงานเสมือนจริงและพนักงานของเราใช้ทั้งคีย์ SSH และรหัสผ่านสำหรับการตรวจสอบสิทธิ์ หากพนักงานของเราคนหนึ่งลืมรหัสผ่านจะมีวิธีเข้ารหัสรหัสผ่านชั่วคราวโดยใช้คีย์ RSA ssh สาธารณะของเขาเพื่อให้ฉันสามารถส่งรหัสผ่านให้เขาทางอีเมลได้หรือไม่

ฉันเคยเห็นคำถามอื่น ๆ ที่เกี่ยวข้องกับคำถามนี้อย่างไรก็ตาม "คำตอบ" โดยทั่วไปไม่แนะนำให้ใช้คีย์ SSH สาธารณะ / ส่วนตัวเพื่อทำการเข้ารหัส / ถอดรหัสทั่วไปและไม่ได้ระบุว่าเป็นไปได้จริง ฉันต้องการทราบว่าเป็นไปได้จริง ๆ และขั้นตอนในการเข้ารหัสและถอดรหัสรหัสผ่านคืออะไร

คำตอบ:


8

ในที่สุดฉันก็พบวิธีการแปลงกุญแจสาธารณะ OpenSSH เป็นรูปแบบ PEM บนบล็อกและสามารถเข้ารหัสและถอดรหัสสตริงโดยใช้คีย์ส่วนตัว / สาธารณะของฉันได้สำเร็จ

ฉันได้อธิบายขั้นตอนที่ใช้ในการเข้ารหัสและถอดรหัส

ในการเข้ารหัสสตริง:

# convert public key to PEM format
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8  > ~/.ssh/id_rsa.pub.pem

# encrypt string using public key
echo "String to Encrypt" \
   | openssl rsautl -pubin -inkey ~/.ssh/id_rsa.pub.pem -encrypt -pkcs \
   | openssl enc -base64 \
   > string.txt

ในการถอดรหัสสตริง (จากไฟล์):

openssl enc -base64 -d -in string.txt \
    | openssl rsautl -inkey ~/.ssh/id_rsa -decrypt

เนื่องจากเป้าหมายของฉันคือส่งรหัสผ่านทางอีเมลฉันจึงเขียนสคริปต์ขั้นพื้นฐานอย่างยิ่งเพื่อให้สิ่งต่าง ๆ เป็นไปโดยอัตโนมัติ:

#!/bin/sh
if test "x${1}" == "x";then
   echo "Usage: ${0} <username>"
   exit 1
fi
SSHUSER=${1}
printf "Enter Password: "
read PASS1
echo ""
echo ""
ssh-keygen -f /home/${SSHUSER}/.ssh/id_rsa.pub -e -m PKCS8 \
    > /tmp/ssh-pubkey-${SSHUSER}.pem
echo 'cat << EOF |openssl enc -base64 -d |openssl rsautl -inkey ~/.ssh/id_rsa -decrypt'
echo "New Password: ${PASS1}" \
   | openssl rsautl -pubin -inkey /tmp/ssh-pubkey-${SSHUSER}.pem -encrypt -pkcs \
   | openssl enc -base64
echo "EOF"
echo ""
rm -f /tmp/ssh-pubkey-${SSHUSER}.pem

ฉันสามารถส่งออกสคริปต์ในอีเมลเพื่อให้ผู้ใช้ถอดรหัส

สคริปต์ที่สมบูรณ์มีอยู่ใน Github: https://gist.github.com/3078682


4

เป็นไปได้เนื่องจากเป็นเพียงคีย์ RSA ใช้ openssl:

openssl rsautl -encrypt -inkey alice.pub >message.encrypted

ฉันตอบคำถามนี้ใน Unix / Linux SE

ฉันต้องบอกว่า PGP เหมาะสมกว่าสำหรับเรื่องนี้


1
ปัญหาคือกุญแจสาธารณะ SSH ไม่ได้อยู่ในรูปแบบที่ OpenSSL รู้จัก ฉันจำเป็นต้องรู้วิธีแปลงคีย์เป็นสิ่งที่สามารถใช้งานได้โดยชุดเครื่องมือเช่น OpenSSL
David M. Syzdek

1

โดยทั่วไปใช่เป็นไปได้ ทั้งหมด SHH ทำคือสร้างโมดูลัส N และสองปุ่ม e (คีย์สาธารณะ) และ d (ส่วนตัวหนึ่ง) กลไกการจ้างงานมักจะ RSA หรือ DSA และคีย์ที่สร้างขึ้นสามารถใช้สำหรับการเข้ารหัส สิ่งที่คุณต้องทำคือดึงมันออกมาจาก base64 blob นั่นคือกุญแจสาธารณะจากนั้นใช้โปรแกรมที่เหมาะสมในการเข้ารหัสข้อมูลด้วยกุญแจเหล่านี้ คุณอาจสนใจMonkeysphereซึ่งสามารถถ่ายโอนระหว่างรูปแบบคีย์ ssh และปุ่ม gnupg สิ่งนี้จะช่วยให้คุณสามารถใช้กุญแจสำหรับการเข้ารหัสได้


0

ปกติจะไม่มีการเข้ารหัสแบบกลุ่มด้วยคีย์ assymetric แต่นั่นไม่สำคัญเพราะคุณไม่ควรติดต่อกับรายละเอียดในระดับนั้น ใช้ชุดเครื่องมือ (openssl เป็นสิ่งที่ดีhttp://www.openssl.org/docs/apps/openssl.html ) เพื่อทำงานให้คุณ สิ่งที่คุณต้องการทำคือสร้างข้อความเข้ารหัสที่มีรหัสผ่านชั่วคราวใหม่และระบุคู่คีย์ของผู้ใช้เป็นผู้รับ ตัวอย่างมากมายในหน้านี้: http://www.openssl.org/docs/apps/smime.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.