我正在编写一个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
但是那说:
错误:读取密码短语时出错。
如何解决此错误?谢谢!
答案 0 :(得分:1)
我认为您的问题与以下主题更相关:如何在bash中自动输入,例如讨论过的问题。在this thread中。
您正尝试在以下行中输入密码foobar
至seth
(对吗?):
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/terminal
中ReadPassword()函数的实现方式。
其他人也遇到了这种情况:据报导它是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.