Verschlüsseln Sie das temporäre Passwort mit dem öffentlichen SSH-Schlüssel

9

Ich verwalte ein virtuelles Büro und unsere Mitarbeiter verwenden sowohl SSH-Schlüssel als auch Kennwörter zur Authentifizierung. Wenn einer unserer Mitarbeiter sein Passwort vergisst, gibt es eine Möglichkeit, ein temporäres Passwort mit seinem öffentlichen RSA-SSH-Schlüssel zu verschlüsseln, damit ich es ihm per E-Mail senden kann?

Ich habe andere Fragen im Zusammenhang mit dieser Frage gesehen. In den "Antworten" wird jedoch generell empfohlen, die öffentlichen / privaten SSH-Schlüssel nicht für die allgemeine Ver- / Entschlüsselung zu verwenden, und es wird nicht angegeben, ob dies möglich ist. Ich würde gerne wissen, ob es tatsächlich möglich ist und welche Schritte zum Ver- und Entschlüsseln des Passworts erforderlich sind.

David M. Syzdek
quelle

Antworten:

8

Ich fand schließlich heraus, wie man einen öffentlichen OpenSSH-Schlüssel in einem Blog in das PEM-Format konvertiert, und konnte eine Zeichenfolge mit meinem privaten / öffentlichen Schlüssel erfolgreich verschlüsseln und entschlüsseln.

Ich habe die Schritte beschrieben, mit denen ich die Ver- und Entschlüsselung durchgeführt habe.

So verschlüsseln Sie eine Zeichenfolge:

# 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

So entschlüsseln Sie eine Zeichenfolge (aus einer Datei):

openssl enc -base64 -d -in string.txt \
    | openssl rsautl -inkey ~/.ssh/id_rsa -decrypt

Da mein Ziel darin besteht, das Passwort per E-Mail zu senden, habe ich ein äußerst einfaches Skript geschrieben, um die Dinge ein wenig zu automatisieren:

#!/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

Ich kann dann die Ausgabe des Skripts in einer E-Mail senden, damit der Benutzer sie entschlüsseln kann.

Das vollständige Skript ist auf Github verfügbar: https://gist.github.com/3078682

David M. Syzdek
quelle
4

Dies ist möglich, da es sich nur um einen RSA-Schlüssel handelt. Verwenden Sie openssl:

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

Ich habe diese Frage unter Unix / Linux SE geklaut .

Ich muss sagen, dass PGP dafür besser geeignet ist.

Lucas Kauffman
quelle
1
Das Problem ist, dass der öffentliche SSH-Schlüssel nicht in einem Format vorliegt, das OpenSSL erkennt. Ich musste wissen, wie man den Schlüssel in etwas konvertiert, das dann von einem Toolkit wie OpenSSL verwendet werden kann.
David M. Syzdek
1

Im Allgemeinen ist dies ja möglich. Alles, was SHH tut, ist, einen Modul N und zwei Schlüssel e (den öffentlichen Schlüssel) und d (den privaten Schlüssel) zu erzeugen. Der verwendete Mechanismus ist normalerweise RSA oder DSA, und die generierten Schlüssel können zur Verschlüsselung verwendet werden. Alles, was Sie tun müssen, ist, sie aus dem base64-Blob zu extrahieren, der der öffentliche Schlüssel ist, und dann ein geeignetes Programm zu verwenden, um Daten mit diesen Schlüsseln zu verschlüsseln. Sie könnten an Monkeysphere interessiert sein, das zwischen dem SSH-Schlüsselformat und den Gnupg-Schlüsseln übertragen kann. Auf diese Weise können Sie die Schlüssel auch zur Verschlüsselung verwenden.

jemand
quelle
0

Normalerweise führt man keine Massenverschlüsselung mit assymetrischen Schlüsseln durch. Dies spielt jedoch keine Rolle, da Sie sich nicht mit dieser Detailebene befassen sollten. Verwenden Sie ein Toolkit (openssl ist in Ordnung http://www.openssl.org/docs/apps/openssl.html ), um die Arbeit für Sie zu erledigen. Sie möchten eine verschlüsselte Nachricht erstellen, die das neue temporäre Kennwort enthält, und das Schlüsselpaar des Benutzers als Empfänger angeben. Beispiele in Hülle und Fülle auf dieser Seite: http://www.openssl.org/docs/apps/smime.html

RAM
quelle