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

我pipe理一个虚拟办公室,我们的员工使用SSH密钥和密码进行身份validation。 如果我们的工作人员忘记密码,有没有办法使用他的公共RSA ssh密钥encryption临时密码,以便通过电子邮件发送给他?

我已经看到了与此相关的其他问题,但是“答案”通常build议不要使用公钥/私钥SSH密钥来执行一般的encryption/解密操作,并且实际上并不表示这是可能的。 我想知道是否确实可行,以及要encryption和解密密码的步骤是什么。

我终于find了如何在博客上将OpenSSH公钥转换为PEM格式,并且能够使用我的私钥/公钥成功地encryption和解密一个string。

我已经概述了我用来执行encryption和解密的步骤。

encryption一个string:

# 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 

解密一个string(来自文件):

 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

这是可能的,因为它只是一个RSA密钥。 使用openssl:

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

我在Unix / Linux SE上提到了这个问题 。

我必须说,PGP更适合这个。

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

通常情况下,不对对称密钥进行“批量encryption”。 但是这并不重要,因为你不应该处理这样的细节。 使用一个工具包(openssl是一个很好的http://www.openssl.org/docs/apps/openssl.html )为你做的工作。 你想要做的是创build一个包含新的临时密码的encryption消息,并指定用户的密钥对作为收件人。 例子嘉豪在这个页面上: http : //www.openssl.org/docs/apps/smime.html