[英]Python subprocess.Popen usage with a login script fails
我正在嘗試使用python做一個登錄腳本,它將嘗試使用shell命令login -q MyUsername
並嘗試多個密碼。 我已經可以生成所需的密碼,但是當我嘗試使用下面的代碼login
, login
命令響應說我輸入了錯誤的用戶名,盡管我知道自己寫的正確。 澄清一下:當我已經知道用戶名而不是密碼時,我正在創建一個使用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.