我管理一个虚拟办公室,我们的员工使用SSH密钥和密码进行身份验证。如果我们的一名员工忘记了他的密码,是否可以使用他的公共RSA ssh密钥加密临时密码,以便我可以通过电子邮件将其发送给他?
我已经看到了与此问题有关的其他问题,但是“答案”通常建议不要使用公共/私有SSH密钥执行常规的加密/解密,并且实际上没有说明是否可行。我想知道是否确实可行,以及加密和解密密码的步骤是什么。
我管理一个虚拟办公室,我们的员工使用SSH密钥和密码进行身份验证。如果我们的一名员工忘记了他的密码,是否可以使用他的公共RSA ssh密钥加密临时密码,以便我可以通过电子邮件将其发送给他?
我已经看到了与此问题有关的其他问题,但是“答案”通常建议不要使用公共/私有SSH密钥执行常规的加密/解密,并且实际上没有说明是否可行。我想知道是否确实可行,以及加密和解密密码的步骤是什么。
Answers:
我终于在博客上找到了如何将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
通常,是可以的。SHH所做的只是生成一个模数N和两个密钥e(公共密钥)和d(私有密钥)。通常采用的机制是RSA或DSA,生成的密钥可用于加密。您所需要做的就是从base64 blob(即公用密钥)中提取它们,然后使用合适的程序使用这些密钥对数据进行加密。您可能对Monkeysphere感兴趣,它可以在ssh密钥格式和gnupg密钥之间进行转换。这还应该允许您使用密钥进行加密。
通常,不使用不对称密钥进行“批量加密”。但这无关紧要,因为您不应该处理该级别的细节。使用工具包(openssl是一个很好的http://www.openssl.org/docs/apps/openssl.html)可以为您完成工作。您想要做的是创建一个包含新临时密码的加密消息,并将用户的密钥对指定为接收者。本页上的大量示例:http : //www.openssl.org/docs/apps/smime.html