Как веб-приложение должно реализовывать хранилище ключей SSH?
Я пишу приложение в Nodejs (используя Meteor в качестве моей платформы), которое, вкратце, должно:
- создать нового пользователя
- создать пару ключей SSH, связанную с этим пользователем, и сохранить ее
- предоставить открытый ключ пользователю (чтобы он мог добавить его в
authorized_keys
файлы, например) - хранить несколько открытых ключей, которые пользователь отправляет
Я довольно осторожен с хранением ключей SSH, даже просто с открытыми ключами, и особенно с сгенерированным закрытым ключом, поскольку он будет использоваться для доступа к нескольким серверам.
Какие меры безопасности я могу предпринять для безопасного хранения этих ключей? В настоящее время я пришел к следующему методу:
- хранить закрытый ключ и открытый ключ в зашифрованных полях базы данных
- при необходимости SSH на сервер, получить закрытый ключ, расшифровать его, записать его в файл, а затем SSH, используя записанный ключ
- удалить файл закрытого ключа после завершения SSH
- запускать автоматическую задачу очистки каждые несколько минут, которая удаляет неиспользуемые ключи SSH (в случае ошибки или прерывания, а файл ключа не был удален)
Тем не менее, это кажется мне неуклюжим. Я не против, если это означает, что данные защищены, но есть ли дальнейшие шаги или более эффективные шаги, которые я мог бы предпринять?