2016-02-16 121 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

你的定義是正確的。它會好得多。感謝您的建議! –