Нашел универсальное решение - необходимо шифрование текста-пароля выполнять с sudo.
printf "$temp_password" | sudo openssl pkeyutl -encrypt -inkey "$public_key_file_path" -pubin -in /dev/stdin -out "$password_file_name.pwd"
Тогда ошибок нет.
Но тем не менее, вопрос о том, почему в macOS Monterey это работает без проблем без sudo - остался.
spoilerА какая у вас macOS?
Проверьте кто-нибудь у себя, у вас этот код выполнится с ошибками или без ошибок?
mkdir test_dir_for_openssl
cd test_dir_for_openssl
openssl genpkey -algorithm RSA -out private_key.pem
openssl rsa -in private_key.pem -pubout -out public_key.pem
temp_password=Test123
public_key_file_path=public_key.pem
password_file_name=encrypted_password_file
printf "$temp_password" | openssl pkeyutl -encrypt -inkey "$public_key_file_path" -pubin -in /dev/stdin -out "$password_file_name.pwd"
===
В итоге проблема оказалась в том, что на macOS Monterey у меня был установлен openssl из brew, а на macOS Sequoia был стандартный системный openssl.
Системный openssl в macOS имеет немного иную реализацию и чтобы с ним работала команда для дешифрования текста с помощью приватного ключа, необходимо поменять аргументы местами.
Вот так работает правильно:
printf "$temp_password" | /usr/bin/openssl pkeyutl -encrypt -in /dev/stdin -pubin -inkey "$public_key_file_path" -out "$password_file_name.pwd"
Тут также об этой проблеме писали -
https://github.com/openssl/openssl/issues/8701