簡體   English   中英

Python子進程.Popen使用登錄腳本失敗

[英]Python subprocess.Popen usage with a login script fails

我正在嘗試使用python做一個登錄腳本,它將嘗試使用shell命令login -q MyUsername並嘗試多個密碼。 我已經可以生成所需的密碼,但是當我嘗試使用下面的代碼loginlogin命令響應說我輸入了錯誤的用戶名,盡管我知道自己寫的正確。 澄清一下:當我已經知道用戶名而不是密碼時,我正在創建一個使用shell命令login的腳本。 下面的代碼顯示了我在做什么(反復輸入密碼)。

for password in passwordList:
    p = Popen(["login","-q","MyUsername"], stdin=PIPE, stdout=PIPE) #The username MyUsername is correct, 100% sure
    print repr(p)

    stdout_value = p.communicate(password)[0] #
    print(str(stdout_value))
    if repr(stdout_value).startswith('Login incorrect\nlogin: '):
        print "ERROR"
    else:
        print "GOOD"
        break

如果我直接在終端中鍵入命令login -q MyUsername提示我輸入密碼,而使用腳本則返回“ Login Incorrect”。 我對Popen工作方式以及如何向stdout寫入也感到困惑。

提前致謝!

(其他問題:是否有更簡便的方法?(嘗試使用多個密碼登錄)。我正在使用login因為它沒有鎖定,並且如果不是超級用戶,則無法訪問用戶數據。

login可能直接從進程的stdin / stdout之外的終端(tty)讀/寫 您可以改用pexpect ,在其文檔中閱讀第一個原因問:為什么不僅僅使用管道(popen())?

import pexpect
output, rc = pexpect.run("login -q MyUsername",
         events={"(?i)password: ": "password"},
         withexitstatus=True)

有沒有更簡單的方法可以做到這一點?

從/ etc / passwd,/ etc / shadow中讀取散列,並使用crypt.crypt()檢查 或使用專門的工具來測試弱密碼,例如“ John the Reaper”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM