期待されるスクリプト:秘密鍵のパスワードを削除する

期待されるスクリプト:秘密鍵のパスワードを削除する

秘密鍵のパスワードを削除しようとしています。手動では簡単です。次のコマンドを実行し、パスワードを入力します。openssl rsa <newkey.pem > newkey-no-password.pem

実際にパスワードを入力する必要がないように、予想されるスクリプトでこれを実行しようとしています。私が書いたコードは次のとおりです。

#!/usr/bin/expect -f
set PASSWORD myPassword

spawn openssl rsa <newkey.pem > newkey-no-pass.pem
expect "Enter pass phrase:"
send "$PASSWORD\r"
expect eof

以下は、スクリプトを実行したときに得られる出力です。

[me@mymachine]# ./test.exp
spawn openssl rsa <newkey.pem > newkey-no-pass.pem
unknown option <newkey.pem
rsa [options] <infile >outfile
... all the options for rsa command ...

パッティングや間に入れてみました<newkey.pemが役に立ちませんでした。'"

私は何が間違っていて、どのように解決できますか?

答え1

spawn私はコマンドがシェルリダイレクトを解決するとは思いません<。以下を使用してシェルに渡して動作させることができますsh -c

#!/usr/bin/expect -f
set PASSWORD myPassword

spawn sh -c "openssl rsa <newkey.pem > newkey-no-pass.pem"
expect "Enter pass phrase:"
send "$PASSWORD\r"
expect eof

これは私にとって効果的です。

# expect -f kkf
spawn sh -c openssl rsa <newkey.pem > newkey-no-pass.pem
Enter pass phrase:myPassword
writing RSA key

答え2

これを使用して秘密鍵を抽出し、pkcs12ファイルからパスワードを削除します。

openssl pkcs12 -in myFile.p12 -nocerts -out myFile.priv.password.pem -passin pass:SomePassword -passout pass:SomeOtherPassword

openssl pkcs8 -topk8 -nocrypt -inform pem -in myFile.priv.password.pem -passin pass:SomeOtherPassword -outform pem -out myFile.priv.pem

私の推測のいくつかは次のとおりです。この方法が役に立ちます。

openssl rsa -in newkey.pem -out newkey-no-pass.pem -passin pass:SomePassword

コマンドラインにパスワードを入力したくない場合は、ファイルを使用できます(アクセス制限)。

openssl rsa -in newkey.pem -out newkey-no-pass.pem -passin file:PasswordFile.txt

関連情報