Cuối cùng tôi đã tìm thấy cách chuyển đổi khóa công khai OpenSSH sang định dạng PEM trên blog và có thể mã hóa và giải mã thành công một chuỗi bằng khóa riêng / chung của tôi.
Tôi đã phác thảo các bước tôi đã sử dụng để thực hiện mã hóa và giải mã.
Để mã hóa một chuỗi:
# 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
Để giải mã một chuỗi (từ tệp):
openssl enc -base64 -d -in string.txt \
| openssl rsautl -inkey ~/.ssh/id_rsa -decrypt
Vì mục tiêu của tôi là gửi e-mail mật khẩu, tôi đã viết một tập lệnh cực kỳ cơ bản để tự động hóa mọi thứ một chút:
#!/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
Sau đó tôi có thể gửi đầu ra của tập lệnh trong e-mail để người dùng giải mã.
Kịch bản hoàn chỉnh có sẵn trên Github: https://gist.github.com/3078682