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