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


9

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

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

Answers:


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

要解密字符串(从文件):

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


4

因为它仅仅是RSA密钥,所以有可能。使用openssl:

openssl rsautl -encrypt -inkey alice.pub >message.encrypted

我在Unix / Linux SE上对这个问题有很深的了解。

我必须说,PGP更适合于此。


1
问题是SSH公钥不是OpenSSL可以识别的格式。我需要知道如何将密钥转换为可由诸如OpenSSL之类的工具包使用的密钥。
David M. Syzdek,2012年

1

通常,是可以的。SHH所做的只是生成一个模数N和两个密钥e(公共密钥)和d(私有密钥)。通常采用的机制是RSA或DSA,生成的密钥可用于加密。您所需要做的就是从base64 blob(即公用密钥)中提取它们,然后使用合适的程序使用这些密钥对数据进行加密。您可能对Monkeysphere感兴趣,它可以在ssh密钥格式和gnupg密钥之间进行转换。这还应该允许您使用密钥进行加密。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.