写入shell

时间:2015-09-17 11:19:45

标签: linux shell sh

我有一段代码如下 -

#!/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作为环绕密码。

2 个答案:

答案 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 -