我有一段代码如下 -
#!/bin/sh
keyA=`openssl rand -base64 32| tr -d "="`
keyB=`openssl rand -base64 32| tr -d "="`
#Encrypt KeyA with KeyB to make keyC
ecryptfs-wrap-passphrase /root/passkeyC.txt
它生成两个键A& B和我需要生成第三个键C.当执行键C的命令时,输出屏幕要求用户输入 -
Passphrase to wrap:
Wrapping passphrase:
我需要将密钥A输出到Passphrase以包装& keyB从脚本本身包装密码短语。不希望它显示在用户屏幕上,而密钥A则用作密码短语以包装& keyB作为环绕密码。
答案 0 :(得分:1)
您可以使用expect轻松为您自动输入。
使用expect,它看起来像这样:
#!/bin/sh
keyA=`openssl rand -base64 32| tr -d "="`
keyB=`openssl rand -base64 32| tr -d "="`
#Encrypt KeyA with KeyB to make keyC. Use expect to automatically fill in the interactive dialogue
expect -c "spawn ecryptfs-wrap-passphrase /root/passkeyC.txt; expect wrap; send \"$keyA\r\"; expect passphrase; send \"$keyB\r\"; interact"
但是不会隐藏来自用户的密钥。 ecryptfs-wrap-passphrase似乎也没有任何选项。 也许您可以将脚本包装在另一个未以交互模式运行的脚本中。你想如何运行你的脚本? (什么时候?)
答案 1 :(得分:1)
ecryptfs-wrap-passphrase
,则 -
从标准输入读取,因此您可以使用here here来提供密钥。
keyA=$(openssl rand -base64 32 | tr -d "=")
keyB=$(openssl rand -base64 32 | tr -d "=")
# Encrypt KeyA with KeyB to make keyC
ecryptfs-wrap-passphrase /root/passkeyC.txt - <<EOF
$keyA
$keyB
EOF
这是一种比man page中显示的更有效的方法,因为它避免了额外的管道。
printf "%s\n%s" "$keyA" "$keyB" | ecryptfs-wrap-passphrase /root/passkeyC.txt -