用于windows远程管理的python库
pywinrm2的Python项目详细描述
Pywinrm
pywinrm是windows远程管理(winrm)服务的python客户端。 它允许您从任何计算机调用目标windows计算机上的命令 它可以运行python。
winrm允许您远程执行各种管理任务。其中包括, 但不限于:运行批处理脚本、powershell脚本和获取 wmi变量。
用于Windows支持。
有关winrm的更多信息,请访问 Microsoft的WinRM站点
要求
- Linux、Mac OS X或Windows
- cpython 2.6-2.7、3.3-3.5或pypy2
- 请求kerberos和请求credssp是可选的
安装
要安装支持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:
- Windows主机->;http://windows host:5985/wsman" rel="nofollow">http://windows host:5985/wsman
- Windows主机:1111->;http://windows host:1111/wsman
- http://windows host->;http://windows host:5985/wsman
- http://windows host:1111->;http://windows host:1111/wsman
- http://windows host:1111/wsman->;http://windows host:1111/wsman
在远程主机上运行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_pem
和cert_key_pem
一起使用时,它将使用如上所述的证书。如果不是,将还原为通过https的基本身份验证。kerberos
:将对域帐户使用kerberos身份验证,该身份验证仅在客户端与服务器位于同一域并且安装了所需的依赖项时有效。当前,需要使用kinit
命令在pywinrm外部初始化kerberos票证。ntlm
:将对域和本地帐户使用ntlm身份验证。credssp
:将对域和本地帐户使用credssp身份验证。允许双跳身份验证。这只适用于https端点,而不适用于http。
加密
默认情况下,winrm不接受与客户端的未加密通信。有两种方法 启用与pywinrm的加密通信:
- 使用https端点而不是http(推荐)
- 使用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不支持消息
加密(例如,basic
auth或旧版本的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 pywinrm0
启用winrm credssp身份验证。这允许双跳支持,因此您可以在远程主机上运行命令时通过网络服务进行身份验证。此命令在powershell中运行。
$ pip install pywinrm1
投稿人(按字母顺序)
- 亚历山德罗皮洛蒂
- 亚历克赛·迪扬
- 克里斯·丘奇
- 大卫·库尔纳佩
- 格玛·戈麦斯
- Jijo Varghese
- 乔丹·博瑞安
- 胡安·J·马丁内斯
- 卢卡斯·贝德纳尔
- 曼努埃尔·塞班
- 马特·克拉克
- 马特戴维斯
- 马克西姆·科夫根
- NIR科恩
- 帕特里克·邓尼根
- 雷纳·阿博洛菲亚
想要帮助-发送请求。我一定会接受好的请求。