如何使用域帐户通过Python(pywinrm)中的WinRM连接到远程计算机?

Sta*_*nko 6 python winrm

我想用pywinrm库在Python中编写一个脚本,以便能够通过WinRM连接到远程机器.

import winrm

s = winrm.Session('MACHINEHOST', auth=('username@domain', 'password'))
r = s.run_cmd('ipconfig', ['/all'])

print r.status_code
print r.std_out
Run Code Online (Sandbox Code Playgroud)

当我使用本地用户时脚本工作正常.当我使用域用户时,我收到以下异常:

winrm.exceptions.UnauthorizedError: 401 Unauthorized.
Run Code Online (Sandbox Code Playgroud)

至于远程机器上的WinRM配置:

/Client/Auth/Basic = True
/Client/TrustedHosts = *
/Service/Auth/Basic = True
/Service/AllowUnencrypted = True
Run Code Online (Sandbox Code Playgroud)

你能建议如何解决这个问题吗?

谢谢.

小智 5

正如 Steve Barnes 所说,您的用户应该使用 kerberos 来使用您的域帐户进行连接。

您首先需要为您的帐户设置一张 kerberos 票证。Windows 会自动给你这个,但在 Linux 下你需要 kinit。使用 klist 查看您当前和默认的票证。

session = winrm.Session(server, auth=('user@DOMAIN', 'doesNotMatterBecauseYouAreUsingAKerbTicket'), transport='kerberos')
Run Code Online (Sandbox Code Playgroud)

我相信您的域帐户需要在 Windows 主机上具有管理员权限。

另请注意,在 pywinrm 0.0.3 版本中,您可以将 auth 参数指定为:

auth=(None, None)
Run Code Online (Sandbox Code Playgroud)

这是因为 pywinrm 使用您的默认 kerberos 票证。


Arn*_*der 5

Pywinrm 使用域用户帐户连接:

在远程 Windows 机器中

  1. 确保在目标 Windows 机器中网络连接类型是“私有”,如果它是“公共”winrm 将不会被配置。
  2. 打开命令提示符并键入:

    winrm qc
    winrm set winrm/config/service @{AllowUnencrypted="true"}
    
    Run Code Online (Sandbox Code Playgroud)
  3. 打开 Powershell 并输入:

    enable-psremoting
    set-item WSMan:\localhost\Client\TrustedHosts * # ('*' is for all hosts, you may specify the host you want)
    
    Run Code Online (Sandbox Code Playgroud)

在你的 Python 代码中

  1. 在你的 python 脚本中:

    import winrm
    
    host = 'YourWindowsHost'
    domain = 'YourDomain'
    user = 'YourDomainUser'
    password = 'YourPassword'
    
    session = winrm.Session(host, auth=('{}@{}'.format(user,domain), password), transport='ntlm')
    
    result = session.run_cmd('ipconfig', ['/all']) # To run command in cmd
    
    result = session.run_ps('Get-Acl') # To run Powershell block
    
    Run Code Online (Sandbox Code Playgroud)