Назад | Перейти на главную страницу

Зашифровать временный пароль с помощью открытого ключа ssh

Я управляю виртуальным офисом, и наши сотрудники используют для аутентификации как 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

Это возможно, поскольку это всего лишь ключ RSA. Используйте openssl:

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

Я снял это с этого вопрос в Unix / Linux SE.

Надо сказать, что PGP для этого больше подходит.

В общем, да, это возможно. Все, что делает SHH, - это генерирует модуль N и два ключа e (открытый ключ) и d (частный). Используемый механизм обычно - это RSA или DSA, а сгенерированные ключи могут использоваться для шифрования. Все, что вам нужно сделать, это извлечь их из блоба base64, который является открытым ключом, а затем использовать подходящую программу для шифрования данных с помощью этих ключей. Вам может быть интересно Обезьяна который может передавать между форматом ключа ssh и ключами gnupg. Это должно позволить вам также использовать ключи для шифрования.

Обычно «массовое шифрование» с асимметричными ключами не выполняется. Но это не имеет значения, поскольку вы не должны иметь дело с таким уровнем деталей. Используйте набор инструментов (openssl - отличный вариант http://www.openssl.org/docs/apps/openssl.html) делать всю работу за вас. Что вы хотите сделать, так это создать зашифрованное сообщение, содержащее новый временный пароль, и указать пару ключей пользователя в качестве получателя. На этой странице множество примеров: http://www.openssl.org/docs/apps/smime.html