使用公共 ssh 密钥加密临时密码

Dav*_*dek 10 encryption ssh password openssl public-key

我管理一个虚拟办公室,我们的员工使用 SSH 密钥和密码进行身份验证。如果我们的一名员工忘记了他的密码,有没有办法使用他的公共 RSA ssh 密钥来加密临时密码,以便我可以通过电子邮件将其发送给他?

我已经看到与此相关的其他问题,但是“答案”通常建议不要使用公共/私有 SSH 密钥来执行一般加密/解密,并且实际上并没有说明这是否可行。我想知道是否确实可能,以及加密然后解密密码的步骤是什么。

Dav*_*dek 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
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