Зашифруйте тимчасовий пароль за допомогою відкритого ключа ssh


9

Я керую віртуальним офісом, і наші співробітники використовують як SSH ключі, так і паролі для аутентифікації. Якщо хтось із наших співробітників забуде свій пароль, чи є спосіб зашифрувати тимчасовий пароль за допомогою свого публічного ssh ключа RSA, щоб я міг надіслати його електронною поштою?

Я бачив інші питання, пов’язані з цим, однак "відповіді", як правило, рекомендують використовувати загальнодоступні / приватні SSH-ключі для загального шифрування / розшифровки, а фактично не встановлюють, якщо це можливо. Мені хотілося б дізнатися, чи дійсно це можливо і які кроки шифрувати, а потім розшифровувати пароль.

Відповіді:


8

Нарешті я з’ясував, як перетворити відкритий ключ 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


4

Це можливо, оскільки це просто ключ RSA. Використовуйте openssl:

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

Я поставив це питання на Unix / Linux SE.

Треба сказати, що PGP для цього більше підходить.


1
Проблема полягає в тому, що відкритий ключ SSH не у форматі, який розпізнає OpenSSL. Мені потрібно було знати, як перетворити ключ на те, що потім може бути використане набором інструментів, таким як OpenSSL.
Девід М. Сиздек

1

Загалом, так це можливо. Все, що робить SHH, генерує модуль N та два клавіші e (відкритий ключ) та d (приватний). Запропонований механізм зазвичай RSA або DSA, і створені ключі можуть використовуватися для шифрування. Все, що вам потрібно зробити, - це витягнути їх з базу даних64, яка є відкритим ключем, а потім використовувати відповідну програму для шифрування даних цими ключами. Можливо, вас зацікавить Monkeysphere, яка може переходити між форматом клавіш ssh і клавішами gnupg. Це повинно дозволяти вам також використовувати ключі для шифрування.


0

Зазвичай людина не робить "масового шифрування" асиметричними ключами. Але це не має значення, оскільки вам не слід мати справу з таким рівнем деталей. Використовуйте інструментарій (openssl - це прекрасний http://www.openssl.org/docs/apps/openssl.html ), щоб зробити роботу за вас. Що ви хочете зробити, це створити зашифроване повідомлення, що містить новий тимчасовий пароль, і вказати пару ключів користувача як одержувача. Приклади на цій сторінці неодноразові: http://www.openssl.org/docs/apps/smime.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.