ในที่สุดฉันก็พบวิธีการแปลงกุญแจสาธารณะ 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