2013-09-25 32 views
1

我想在debian 7上創建一個帶有隨機密碼的新用戶。在debian 7(fabric)上添加一個隨機密碼的用戶

的fabfile看起來是這樣的:

import hashlib 
import string 
import random 

def new_user(user): 
    passwd = random_pass() 
    passwd_sha512 = "%s" % hashlib.sha512(passwd).hexdigest() 
    sudo("useradd %s --password %s" % (user, passwd_sha512)) 


def random_pass(size=30, chars=string.ascii_letters + string.punctuation): 
    return ''.join(random.choice(chars) for x in range(size)) 

請告訴我錯在這裏?塊大小? /etc/shadow中也缺少加密類型(sha512的$6$)。

我試圖用--password $6$%s將它加到參數中。

有人能指點我正確的方向嗎?

+0

在用sudo()調用它之前打印出你的命令。如果您可以複製/粘貼打印的密碼並運行THAT,那麼這是一個逃避問題,正如umläute所建議的。但是... 我會避免試圖制定一個解決方法,使用別的東西,如子進程,而不必首先完全理解失敗。 首先確認Fabric中失敗的內容也會在命令行中直接失敗。此外,我會假設至少「一些」字符永遠不會有效的密碼。你應該研究什麼是可接受的密碼字符,然後解釋random_pass內部的密碼字符。 –

回答

0

您的密碼可能包含「怪異」字符,這會使實際的cmd字符串不符合您的期望。使用subprocess.call(使用字符串數組)而不是單個字符串可能會獲得更多成功。

import subprocess 
subprocess.call(['sudo', 
       'useradd', 
       '--password', passwd_sha512, 
       user])