用于windows远程管理的python库

pywinrm2的Python项目详细描述


Pywinrm

pywinrm是windows远程管理(winrm)服务的python客户端。 它允许您从任何计算机调用目标windows计算机上的命令 它可以运行python。

licensetravis buildAppveyor生成coveragepypi

winrm允许您远程执行各种管理任务。其中包括, 但不限于:运行批处理脚本、powershell脚本和获取 wmi变量。

用于Windows支持。

有关winrm的更多信息,请访问 Microsoft的WinRM站点

要求

安装

要安装支持basic、certificate和ntlm auth的pywinrm,只需

$ pip install pywinrm

要使用kerberos身份验证,您需要这些可选的依赖项

# for Debian/Ubuntu/etc:
$ sudo apt-get install gcc python-dev libkrb5-dev
$ pip install pywinrm[kerberos]# for RHEL/CentOS/etc:
$ sudo yum install gcc python-devel krb5-devel krb5-workstation python-devel
$ pip install pywinrm[kerberos]

要使用credssp身份验证,您需要这些可选的依赖项

# for Debian/Ubuntu/etc:
$ sudo apt-get install gcc python-dev libssl-dev
$ pip install pywinrm[credssp]# for RHEL/CentOS/etc:
$ sudo yum install gcc python-devel openssl-devel
$ pip install pywinrm[credssp]

示例用法

在远程主机上运行进程

importwinrms=winrm.Session('windows-host.example.com',auth=('john.smith','secret'))r=s.run_cmd('ipconfig',['/all'])>>>r.status_code0>>>r.std_outWindowsIPConfigurationHostName............:WINDOWS-HOSTPrimaryDnsSuffix.......:NodeType............:HybridIPRoutingEnabled........:NoWINSProxyEnabled........:No...>>>r.std_err

注意:pywinrm将尝试从以下格式猜测正确的端点url:

在远程主机上运行powershell脚本

importwinrmps_script="""$strComputer = $HostClear$RAM = WmiObject Win32_ComputerSystem$MB = 1048576"Installed Memory: " + [int]($RAM.TotalPhysicalMemory /$MB) + " MB" """s=winrm.Session('windows-host.example.com',auth=('john.smith','secret'))r=s.run_ps(ps_script)>>>r.status_code0>>>r.std_outInstalledMemory:3840MB>>>r.std_err

powershell脚本在发送到windows主机之前将以base64 utf16 little-endian编码。为了方便起见,错误消息将从powershell clixml格式转换为可读格式。

使用域用户的低级api运行进程,禁用httpS证书验证

fromwinrm.protocolimportProtocolp=Protocol(endpoint='https://windows-host:5986/wsman',transport='ntlm',username=r'somedomain\someuser',password='secret',server_cert_validation='ignore')shell_id=p.open_shell()command_id=p.run_command(shell_id,'ipconfig',['/all'])std_out,std_err,status_code=p.get_command_output(shell_id,command_id)p.cleanup_command(shell_id,command_id)p.close_shell(shell_id)

有效的传输选项

pywinrm支持各种传输方法,以便向winrm服务器进行身份验证。transport参数中支持的选项是;

  • basic:basic auth仅适用于本地windows帐户,而不适用于域帐户。发送到服务器时,凭据以base64编码。
  • 纯文本:与基本身份验证相同。
  • 证书:通过映射到服务器上本地Windows帐户的证书进行身份验证。
  • ssl:当与cert_pemcert_key_pem一起使用时,它将使用如上所述的证书。如果不是,将还原为通过https的基本身份验证。
  • kerberos:将对域帐户使用kerberos身份验证,该身份验证仅在客户端与服务器位于同一域并且安装了所需的依赖项时有效。当前,需要使用kinit命令在pywinrm外部初始化kerberos票证。
  • ntlm:将对域和本地帐户使用ntlm身份验证。
  • credssp:将对域和本地帐户使用credssp身份验证。允许双跳身份验证。这只适用于https端点,而不适用于http。

加密

默认情况下,winrm不接受与客户端的未加密通信。有两种方法 启用与pywinrm的加密通信:

  1. 使用https端点而不是http(推荐)
  2. 使用ntlm、kerberos或credssp作为传输身份验证

建议使用https端点,因为它将加密所有发送的数据 到服务器(包括所有头),与所有 身份验证类型,并可以正确验证远程主机标识(与由 可验证的证书颁发机构)。您可以使用此脚本 使用自签名证书轻松地在winrm上设置https端点,但是 建议在生产环境中使用可验证的证书颁发机构。

第二个选项是使用ntlm、kerberos或credssp,并设置消息加密 arg to protocol toauto(默认值)或always。这将使用身份验证gss-api 用于加密发送到的邮件内容的包装和展开方法 服务器。这种加密形式独立于传输层,并且加密的强度 使用的身份验证类型因所选的基础身份验证类型而异(ntlm通常是最弱的,credssp 最强的)。

要配置消息加密,可以使用消息加密参数 初始化协议时。此选项有3个值,可以设置如下 下面,

  • 自动:默认情况下,只有在auth方法可用且未使用https时,才会使用消息加密。
  • 从不:即使不通过https,也不会使用消息加密。
  • 始终:即使在通过https运行时,也将始终使用消息加密(如果所选身份验证方法上没有加密支持,则失败)。

如果将值设置为always并且transport opt不支持消息 加密(例如,basicauth或旧版本的pykerberos无消息 已安装加密支持),pywinrm将引发异常。

如果不使用https端点或消息加密,则默认配置的winrm 服务器将自动拒绝来自pywinrm的请求。可以修改服务器设置 允许未加密的邮件和凭据,但这是高度 不安全,只能用于诊断目的。为了允许未加密的通信, 在上运行以下命令WinRM服务器(提供了CMD和Powershell版本):

# from cmd
winrm set winrm/config/service @{AllowUnencrypted="true"}

# or from powershell
Set-Item -Path "WSMan:\localhost\Service\AllowUnencrypted" -Value $true

同样,这不应该在生产环境中使用,因为您的凭据和winrm 可以轻松恢复邮件。

在远程主机上启用winrm

使用自签名证书(包括防火墙规则)通过http和https启用winrm:

# from powershell:
Invoke-Expression ((New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1'))

为测试使用启用WinRM over HTTP(包括防火墙规则):

winrm quickconfig

启用WinRM基本身份验证。对于域用户,必须使用ntlm、kerberos或credssp身份验证(kerberos和ntlm身份验证默认启用,credssp不启用)。

$ pip install pywinrm
0

启用winrm credssp身份验证。这允许双跳支持,因此您可以在远程主机上运行命令时通过网络服务进行身份验证。此命令在powershell中运行。

$ pip install pywinrm
1

投稿人(按字母顺序)

  • 亚历山德罗皮洛蒂
  • 亚历克赛·迪扬
  • 克里斯·丘奇
  • 大卫·库尔纳佩
  • 格玛·戈麦斯
  • Jijo Varghese
  • 乔丹·博瑞安
  • 胡安·J·马丁内斯
  • 卢卡斯·贝德纳尔
  • 曼努埃尔·塞班
  • 马特·克拉克
  • 马特戴维斯
  • 马克西姆·科夫根
  • NIR科恩
  • 帕特里克·邓尼根
  • 雷纳·阿博洛菲亚

想要帮助-发送请求。我一定会接受好的请求。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
当使用RequestDispatcher时,servlets Java最终没有被调用   java生成对具有可变参数数的方法的调用   java如何使用select子句中的参数化列映射iBATIS的查询?   java无法创建类型为org的插件。阿帕奇。登录中。log4j。果心阿佩德。元素RollingFile的RollingFileAppender   java当子实体和父实体之间存在OneTONE JPA关系时,是否可以将其与父实体一起持久化?   Android上的java Facebook集成fbconnect断开链接   获取方法调用方的java机制   从列表创建Oracle阵列时出现java问题   添加和检索元素的ArrayList的java ArrayList   在java中从字符串中删除无效的XML字符   java如何构建完整生成的maven模块   java如何准确地改变播放所有分辨率midi文件的速度?   shell javac:无效标志:/src/中位_度。ubuntu中的java   java使用从其他类的方法检索到的信息