Dav*_*dek 10 encryption ssh password openssl public-key
我管理一个虚拟办公室,我们的员工使用 SSH 密钥和密码进行身份验证。如果我们的一名员工忘记了他的密码,有没有办法使用他的公共 RSA ssh 密钥来加密临时密码,以便我可以通过电子邮件将其发送给他?
我已经看到与此相关的其他问题,但是“答案”通常建议不要使用公共/私有 SSH 密钥来执行一般加密/解密,并且实际上并没有说明这是否可行。我想知道是否确实可能,以及加密然后解密密码的步骤是什么。
我终于在博客上找到了如何将 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
Run Code Online (Sandbox Code Playgroud)
解密字符串(来自文件):
openssl enc -base64 -d -in string.txt \
| openssl rsautl -inkey ~/.ssh/id_rsa -decrypt
Run Code Online (Sandbox Code Playgroud)
由于我的目标是通过电子邮件发送密码,因此我编写了一个非常基本的脚本来使事情自动化:
#!/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
Run Code Online (Sandbox Code Playgroud)
然后,我可以将脚本的输出发送到电子邮件中,供用户解密。
完整的脚本可在 Github 上获得:https : //gist.github.com/3078682