我想做点什么
openssl enc -d -aes256 -in somefile | less
openssl
需要stdin
的密码。当涉及less
时,这会搞得一团糟。
有没有办法从交互式命令中获取输出(比如openssl
要求输入密码)并将输出传输到less
?
或者使用bash脚本是否有更好的技术?
答案 0 :(得分:3)
也许让shell脚本请求密钥,然后将密钥存储在临时文件中并使用openssl的-kfile选项来查找它。希望你的openssl版本支持-kfile。
我担心安全性,但是稍微小心点安全漏洞可能比你想象的要小。 (但你相信你的系统管理员和sudoers ......?)
#!/bin/bash
INFILE=somefile
read -s -p "Enter key for $INFILE: " key
echo
# write the key to a temp file; use mktemp(1)
# for safer creation of a privately-owned file.
#
TMPKEY=$(mktemp -t) || exit 1
echo "$key" > "$TMPKEY"
# will remove the temp file on script exit
trap 'rm -f "$TMPKEY"' EXIT
# remove the key file a couple seconds after openssl runs
(sleep 2; rm -f "$TMPKEY") &
openssl enc -d -aes256 -in "$INFILE" -kfile "$TMPKEY" | less
[ -f "$TMPKEY" ] && rm -f "$TMPKEY"
trap - EXIT
# rest of script...
exit 0
答案 1 :(得分:1)
你可以试试这个:
echo 'mypassword' | openssl enc -d -aes256 -in somefile | less
但这看起来并不安全。
我没有尝试以这种方式运行openssl
,但如果它过于冗长并且之前的代码无效,那么您可以尝试使用expect。这是一个例子:
expect -c '
spawn yourscript
expect "Please enter your password:"
send "$PASSWORD"
'