【问题标题】:Script cannot read password脚本无法读取密码
【发布时间】:2014-07-09 03:55:12
【问题描述】:

不幸的是,Python 脚本旨在使用提升的凭据运行

  1. 它仍然提示我输入密码
  2. 当我输入正确的密码时它不起作用

这里是 script1,它使用提升的凭据调用 script2

import os
import sys, subprocess, socket, string
import wmi, win32api, win32con
import win32com.shell.shell as sh   

ASADMIN = '/user:DOMAIN\username'
os.system('"runas /user:DOMAIN\username "D:/Python27/python.exe script2.py sender-ip=10.10.10.10 < password.txt""')
sys.exit(0)

if sys.argv[-1] != ASADMIN:
    script = os.path.abspath(sys.argv[0])
    params = ''.join([ASADMIN] + ['D:\Python27\python.exe',script] + sys.argv[1:])
    sh.ShellExecuteEx(lpVerb='runas',lpFile=sys.executable,lpParameters=params)
    sys.exit(0)

这里是脚本2

导入系统、子进程、套接字、字符串 导入 wmi、win32api、win32con

对于 [item.strip('sender-ip=') 中的 args 对于 sys.argv[1:]] 中的项目:

userIP = args
userloggedon = ""

# perform system lookup of IP address
userIP = "\\\\" + userIP

pst = subprocess.Popen(
        ["D:\pstools\psloggedon.exe", "-l", "-x",  userIP],
        stdout = subprocess.PIPE,
        stderr = subprocess.PIPE
    )

out, error = pst.communicate()

userLoggedOn = out.split('\n')[1].strip()
print 'userId={}'.format(userLoggedOn)
f = open('D:\SymantecDLP\Protect\plugins\output.txt', 'w')
f.write('userId={}'.format(userLoggedOn))

output.txt 未创建

有什么想法吗?

编辑

我也读过这个帖子,How to supply password to runas command when executing it from java

但无论我尝试什么,我都会不断收到错误

Attempting to start c:\test.bat as user "DOMAIN\username" ...
RUNAS ERROR: Unable to run - c:\test.bat
1326: Logon failure: unknown user name or bad password.

【问题讨论】:

  • 如果你这样做print out会得到什么?
  • @pss -- 我在哪里保存“打印输出”
  • 倒数第五行,即out, error = pst.communicate()之后
  • He publicado una respuesta, pero si usted publica información sobre el error que se obtiene a partir de la ejecución de su código, se podría mejorar。

标签: python elevated-privileges


【解决方案1】:

让我们谈谈你当时的问题。

1.它仍然提示我输入密码

排队

os.system('"runas /user:DOMAIN\username "D:/Python27/python.exe script2.py sender-ip=10.10.10.10 < password.txt""')

您正在向script2 提供密码。 runas 命令仍然需要密码,因为它正试图以另一个用户身份运行程序。

2。当我输入正确的密码时它不起作用

嗯...代码不工作,很清楚。但是,当你问一个问题时,你必须更具体。现在看看你的代码,我可以看到你正在尝试在远程机器上执行ping

远程机器可能有防火墙吗? 你试过手动ping吗?

编辑: 未创建 output.txt 文件,并且运行脚本不会告诉您任何有关写入文件的错误,显然您的代码遇到了sys.exit() 行之一。

【讨论】:

  • 未创建 output.txt 文件,并且运行脚本不会告诉您写入文件的错误,显然您的代码遇到了sys.exit() 行之一。
  • 我可以手动 ping 远程机器。当我使用提升的凭据手动打开命令提示符并运行 script2 时,它运行良好。为了简化问题,我更改了 script2 ...所有机器都可以 ping
  • 解决第 1 点:如何为 runas 命令提供密码。这是我的问题。
  • 好的,那是另一个问题。这个问题已经回答了。我建议你写一个新问题,比如说How do I provide the password automatically to the runas command?
【解决方案2】:

您可以使用 PsExec https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

您可以提供用户名和密码,执行不需要提升为管理员:

psexec [\computer[,computer2[,...] | @file]]\ [-u 用户 [-p psswd] [-ns][-r 服务名][-h][-l][-s|-e][-x][ -i [会话]][-c [-f|-v]][-w 目录][-d][-][-an,n,...] cmd [参数]

使用 -e 开关给出与 Runas /netonly 相同的结果:

-e 不加载指定帐户的个人资料。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2019-06-28
    相关资源
    最近更新 更多