2016-02-16 86 views
0

密码我有运行有readeable密码作为参数一些命令bash脚本:庆典桑达:替换字符串

#/bin/bash 
batch.sh --user=stefano --option=read-only --password=my_password_very_secret 
batch.sh --password=password --user=dummy --option=abc 
batch.sh --option=abc --user=dummy2 --password=whatever 
batch.sh --user=dummy3 --password=12345 

的batch.sh脚本执行一些动作和写入命令本身就是一个日志文件,它的输出。

在此日志中,我希望密码值将被“隐藏”(或“*********”)字符串覆盖。

我发现是下面的一个最快的,但可能不干净的解决方案......

Script: batch.sh 

#!/bin/bash 
echo "This is a log" > /path/to/log/file.txt 
echo "[email protected]" | tr ' ' '\n' | sed 's|password=\(.*\)|password=********|' | tr '\n' ' ' >> /path/to/log/file.txt 
echo "Completed" >> /path/to/log/file.txt 

...但我几乎可以肯定,这不是最优雅的方式。 我还有什么不同的写法?

在日志文件中的预期输出创造应该是这样的

This is a log 
batch.sh --user=stefano --option=read-only --password=******** 
batch.sh --password=******** --user=dummy --option=abc 
batch.sh --option=abc --user=dummy2 --password=******** 
batch.sh --user=dummy3 --password=******** 
Completed 
+0

是的,我可以改变它! –

回答

1

你的bash脚本应该是这样的:

sed 's/password=[^[:space:]]*/password=****** /g' <<< "[email protected]" >> logfile 

然而,在命令行上传递密码是不是一个好理念。命令行参数使用ps命令或通过/proc/PID/cmdline可见。

+0

我定义地同意你在命令行上使用密码不是一个好主意,因为可以通过ps命令查询它们,但没有人(除我以外)有权通过ssh或telnet连接到主机。相反,用户可以通过ftp和nfs读取由bash脚本创建的日志。出于这个原因,我必须警告用户命令已被触发,但我不希望任何用户可以读取任何密码。如此写道,您的解决方案非常优雅,适合我的需求! –

+1

如果您的shell脚本从配置文件读取密码该怎么办?这应该是可能的。 – hek2mgl

+0

你的定义是正确的。它会好得多。感谢您的建议! –