2010-08-17 128 views
5

我有一個簡單的Bash腳本,可以自動執行需要基於密碼的身份驗證的任務。 目前我明文存儲的憑據:加密/解密存儲在配置文件中的密碼

$ cat ~/.myconfig 
username=foo 
password=bar 

顯然這是很糟糕 - 所以我不知道是否有加密/用我的公鑰/私鑰對解密密碼的簡單方法。使用另一個密碼進行加密不會獲得太多,所以我希望它自動發生。

我做了一些研究(在這裏和其他地方),但我走出我的深度在這一個...

回答

3

你可以存儲密碼,MD5校驗碼,前加點鹽。

創建:

\#!/bin/bash 

salt=12345_ 

protocol=sha1sum 

read -p "Enter login: " username 
read -p -s "Password: " pass1 
read -p -s "Repeat: pass2 

if [ "pass1 != pass2" ]; then echo "Pass missmatch"; exit 1; else password=pass1; fi 

echo -en "$username " >> ./mypasswd 
echo -e "${salt}${password} | $protocol | awk '{print $1}'" >> ./mypqsswd 

讀:

\#!/bin/bash 
salt=12345_ #(samesalt) 
protocol=sha1sum 

read -p "Enter username: " username 
read -p -s "Enter password: " password 

if [ `grep $username ./mypasswd | awk '{print $2}' != `echo -e "`echo ${salt}${password} | $protocol | awk '{print $2}'`" ]; then echo -e "wrong username or password"; exit 127; else echo -e "login successfull"; fi 

有你的代碼。

+0

MD5是不安全的。改用SHA。 ('sha1sum','sha256sum','sha512sum',_etc_。,取決於你想要的散列長度。) – 2012-05-01 01:03:26

+0

它更好,然後以純文本保存,我只是展示它是如何工作的。 我只是添加協議變量,所以只是改變它,你得到sha256 sha512 ..等 – Sky 2012-05-01 01:41:40

+0

謝謝,這看起來很有用! – AnC 2012-05-20 18:10:17

2

如果您只是想隱藏密碼,然後存儲它的SHA1哈希。將輸入密碼的散列與您存儲的散列進行比較。

+1

並針對字典攻擊更改文件權限'chmod go-rw myconfig'。 – Eike 2010-08-17 09:46:20

+0

'自動'表示沒有輸入密碼。沒有人可以輸入它。 – 2010-08-17 10:44:48

+0

GregS是對的 - 如果我通過要求用戶輸入另一個密碼來自動輸入實際密碼,那麼首先將實際密碼存儲起來沒有多大意義。 – AnC 2010-08-17 10:51:10

3

要自動執行任務,請提供密碼;加密/模糊密碼並不會有什麼不同,您還需要提供解密。
解決這個難題的唯一方法是一個類似代理的程序,例如ssh-agent,它爲您存儲您的密碼。

(編輯:修正鏈接)

+0

ssh-agent聽起來像我正在尋找的東西 - 但是,我無法弄清楚我應該如何使用它。 a)假設我從文件加載了加密密碼,那麼我如何解密它? b)我首先用什麼來加密密碼? (我希望這是一個單獨的手動步驟。) – AnC 2010-08-18 13:53:12

+0

ssh-agent作爲一個例子來說明它如何實現。但是,這是針對ssh相關連接的特定解決方案。對於您的具體情況,可能會創建類似的內容,但這取決於您的應用程序。 – pavel 2010-08-18 14:17:46

+0

我猜想我正在考慮使用鑰匙圈/鑰匙串管理器來確定和訪問各自的密鑰對 - 但可能沒有便攜式解決方案。 (我的應用程序只是一個Bash腳本調度一些命令 - 認爲HTTP基本身份驗證與捲曲。) – AnC 2010-08-18 14:42:24