Я пишу сценарий bash для создания и использования закрытого ключа RSA. Когда я запускаю его, он не может сгенерировать закрытый ключ и говорит: «Не удалось загрузить ключ Priavate», затем: Ожидается: ЛЮБОЙ ЧАСТНЫЙ КЛЮЧ.
Он работает, когда я запускаю команды genrsa через iTerm2, используя pass: foo в качестве пароля, но я не могу заставить его использовать шестнадцатеричную строку, которую я генерирую в функции gen_hex.
gen_hex() {
# generate random hexadecimal string/array
echo hexdump -n 16 -e '4/4 "%08X" 1 "\n"' /dev/random
}
check_for_keys() {
if [ ! -f ./public.pem ]; then
echo "> Generating Passphrase..."
passp = $(gen_hex)
touch pass.txt
echo $passp > pass.txt
echo "> Done."
echo "> Generating keys..."
openssl genrsa -des3 -passout pass:$passp -out private.pem 4096
echo "> Done."
echo "> Exporting Public Key..."
openssl rsa -in private.pem -passin pass:$passp -outform PEM -
pubout - out public.pem
echo "> Done."
fi
}
Полное сообщение об ошибке:
:unable to load Private Key 35508:error:0906D06C:PEM
routines:PEM_read_bio:no start line:
/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-
64.50.6/src/crypto/pem/pem_lib.c:648:Expecting: ANY PRIVATE KEY
Спасибо!





У вас есть (как минимум) две серьезные проблемы. Во-первых, gen_hex не выводит шестнадцатеричную строку; он выводит команду, которую вы хотите запустить. Отбросьте echo. Во-вторых, вы не можете ставить пробелы вокруг = в задании.
gen_hex() {
# generate random hexadecimal string/array
hexdump -n 16 -e '4/4 "%08X" 1 "\n"' /dev/random
}
а также
passp=$(gen_hex)
В-третьих, вы должны указывать $passp везде, где он используется, чтобы избежать неприятных сюрпризов, связанных с интерпретацией оболочкой любого из символов в строке. На всякий случай я бы также использовал printf вместо echo, хотя бы по той причине, чтобы избежать новой строки, которую echo добавит в конец парольной фразы.
printf '%s' "$passp" > pass.txt