Python subprocess.Popen使用登录脚本失败

时间:2014-10-27 13:25:57

标签: python shell login subprocess

我正在尝试使用python执行登录脚本,该脚本将尝试使用shell命令login -q MyUsername登录并尝试多个密码。我已经可以生成所需的密码但是当我尝试使用下面的代码登录时,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,系统会提示我输入密码,而使用该脚本会返回“登录不正确”。我也对Popen如何工作以及如何写入stdout感到困惑。

提前致谢!

(其他问题:有更简单的方法吗?(尝试使用多个密码登录)我正在使用login,因为它没有锁定,如果是,则无法访问用户数据不是超级用户)。

1 个答案:

答案 0 :(得分:1)

login可能read/write directly from/to terminal (tty)在流程之外'}标准输入/输出。您可以使用pexpect,在其文档Q: Why not just use a pipe (popen())?中阅读第一个原因:

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

有更简单的方法吗?

从/ etc / passwd,/ etc / shadow和check those using crypt.crypt()中读取哈希值。或者使用专门的工具来测试弱密码,例如"John the Reaper"