2016-12-06 26 views
0

我想讓自動腳本創建一個郵件帳戶與快遞IMAP。 我嘗試使用此文件,但有關密碼的部分不工作,用戶沒有任何傳球,這意味着第一個EOF後的行不執行在這裏文件快遞imap

userdb $1 set uid=5000 gid=5000 home=/var/mail/$1 mail=/var/mail/$1 <<EOF 
userdbpw -md5 | userdb $1 set systempw 
$2          
$2          
EOF 
+1

提供最小的可驗證樣本輸入和預期輸出。 – Inian

+0

$ 1是用戶名,$ 2是我們用作參數的密碼。 如果我輸入這個命令,它會要求用戶手動輸入密碼並確認。這就是我想要避免的,然後,用戶根本不需要互動。 目前,使用該代碼創建用戶,但沒有密碼,因此,它並不真正起作用 – Michael003

+1

當您以交互方式運行它時,這段代碼是否工作? – Aserre

回答

1

它看起來像你想要做的是這樣的:

#!/bin/bash 
md5pass="$(echo -n "$2" | md5)" 
userdb $1 set uid=5000 gid=5000 home=/var/mail/$1 mail=/var/mail/$1 systempw="$md5pass" 

......既然你已經選擇了使這一過程非交互,因此,輸入密碼不會處於ps的安全事件嗅,或在某些情況下history +任何其他記錄。

概述:

  • echo -n:不要換行符添加到密碼
  • md5:非交互的方式來獲得密碼的MD5

注意userdbpw讀來自stdin。提供它作爲輸入的命令行參數不會使它更安全。

替代方式來獲得MD5:

             一些其他途徑獲得的MD5,這取決於utils的/封裝可供選擇:

  • echo -n pass | openssl dgst -md5 
    1a1dc91c907325c69271ddf0c944bc72

  • echo -n pass | md5sum | cut -f1 -d ' ' 
    1a1dc91c907325c69271ddf0c944bc72

  • echo -n pass | md5 
    1a1dc91c907325c69271ddf0c944bc72

In each of the above;

  •  
    printf "%s" "pass"

        Would also be a suitable replacement for:

  •  
    echo -n "pass"