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

Передача секретного ключа в scp из командной строки вместо файла

Есть ли способ передать содержимое закрытого ключа непосредственно в scp вместо того, чтобы копировать ее в файл и указывать на нее через -i /path/to/key.pem вариант?

Итак, вместо того, чтобы делать:

scp -i key.pem source target

Могу я сделать что-то вроде следующего?

scp -i '-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAMIIEowIBAA...\n' source target

Конечно, я пробовал это, и это не сработало, но, возможно, этого можно добиться с помощью конвейера BASH, перенаправления вывода или чего-то в этом роде.

Причина, по которой мне нужно это сделать, заключается в том, что я не могу хранить ключи в файловой системе (это очень длинная и скучная история), и эту команду нужно будет выполнять миллионы и миллионы раз с разными ключами каждый раз, поэтому дополнительные дисковый ввод-вывод будет иметь большое значение в наших результатах.

если ты не могу раскрывать больше информации мы действительно не можем вам помочь: вопросы о сбое сервера должны предоставлять нам достаточный контекст для разумного анализа проблемы, а этот - нет.

Что я могу сказать вам определенно, так это то, что «передача ключа в командной строке» - плохая идея: если вы сделаете это, вы унаследуете все проблемы, обсуждаемые в этот вопрос что в основном означает любой на машине может видеть ваш закрытый ключ. (Вот почему ssh, scp, и sftp команды не позволяют вам этого делать.)

Рассмотрите возможность использования ssh-agent вместо этого для обработки ваших ключей - здесь есть некоторые дополнительные последствия, но вы можете в основном хранить свои ключи в файловой системе, загружать их в агент, а затем разрешить агенту передавать ключи клиенту для целей аутентификации (что должно решить, или хотя бы уменьшить ваши проблемы с производительностью).

Если ssh-agent не подходит для ваших нужд, вам придется взломать и перекомпилировать SSH-клиент для поддержки того, что вы хотите каким-то образом.

Если вам абсолютно необходимо указать файл в командной строке, вы можете загрузить такой файл:

echo -ne '-----BEGIN ...\n' | ssh target_host "cat > ~/.ssh/authorized_keys"

В -n опция эха подавляет завершающуюся новую строку. В -e опция расширяет escape-символы, такие как \n. Если вы хотите добавить к файлу вместо его замены, вы можете использовать >> вместо того >.