Ssh

使用公共 ssh 密鑰加密臨時密碼

  • July 9, 2012

我管理一個虛擬辦公室,我們的員工使用 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

解密字元串(來自文件):

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

引用自:https://serverfault.com/questions/406108