如何在bash脚本中输入密码以解锁密钥

时间:2018-07-23 10:01:44

标签: bash unix openssl hyperledger-sawtooth

我正在编写一个bash文件来自动执行一个过程。为此,我使用以下命令创建了一个新的密码加密密钥:

openssl ecparam -genkey -name secp256k1 | openssl ec -out key-file.pem -aes128 -passout: pass:foobar 

它与密码foobar完美配合。 最终,我在脚本中使用了以下命令:

seth account create --nonce=0 --wait keyAliasName 

在CMD上说:

  

输入密码以解锁keyAliasName。

我尝试过:

echo foobar | seth account create --nonce=0 --wait keyAliasName 

但是那说:

  

错误:读取密码短语时出错。

如何解决此错误?谢谢!

2 个答案:

答案 0 :(得分:1)

我认为您的问题与以下主题更相关:如何在bash中自动输入,例如讨论过的问题。在this thread中。

您正尝试在以下行中输入密码foobarseth(对吗?):

echo foobar | seth account create --nonce=0 --wait keyAliasName 

但是seth提示“ 输入密码以解锁keyAliasName ”,然后要读取密码作为用户输入。

所以您可以做的是使用expect脚本:

#!/usr/bin/expect
spawn ./your_script.sh
expect "Enter passphrase to unlock keyAliasNam"
send "foobar\n"
interact

答案 1 :(得分:0)

如果您的环境中可以使用expect方法,则该方法可能会起作用。该答案扩展了导致问题的原因。这似乎就是Go的x/crypto/ssh/terminalReadPassword()函数的实现方式。

其他人也遇到了这种情况:据报导它是Go的一个问题,几周前仍在活跃:x/crypto/ssh/terminal: ReadPassword doesn't work on redirected stdin giving inappropriate ioctl for device #19909。在“您做了什么?”部分中,它包括一个简单的复制器。

对于本机bash方法,目前似乎没有任何解决方法,除了修改getPassword()函数中的sawtooth-seth代码以遵循上述方法外here

P.S .:如果您提供了 exact 错误输出:Error reading password而不是ERROR Reading the passphrase.

,则可以更轻松地找出问题所在。