pywinrm 技术文档
pywinrm 是一个专为 Windows 远程管理服务(WinRM)设计的 Python 客户端库,它使得从任何运行着 Python 的机器上向目标 Windows 主机发起命令成为可能。通过 WinRM,用户可以远程执行各种管理任务,如批处理脚本、PowerShell 脚本和查询WMI变量等,是集成到自动化工具(如Ansible)中以支持Windows系统的核心组件。
安装指南
基础安装
如果你只需要基本的认证方式(比如基础、证书、NTLM),可以通过以下命令进行安装:
pip install pywinrm
加载可选依赖以使用高级认证
对于Kerberos认证:
Debian/Ubuntu 系列:
sudo apt-get install gcc python3-dev libkrb5-dev
pip install pywinrm[kerberos]
RHEL/CentOS 系列:
sudo dnf install gcc krb5-devel krb5-workstation python3-devel
pip install pywinrm[kerberos]
对于CredSSP认证:
pip install pywinrm[credssp]
使用说明
基本使用示例
以下代码演示了如何连接到一台远程Windows主机并执行ipconfig /all
命令:
import winrm
s = winrm.Session('windows-host.example.com', auth=('用户名', '密码'))
r = s.run_cmd('ipconfig', ['/all'])
print(r.status_code)
print(r.std_out.decode())
PowerShell脚本执行
如果你想在远程主机上执行PowerShell脚本,可以这样做:
ps_script = """
$strComputer = $Host
$RAM = WmiObject Win32_ComputerSystem
"Installed Memory: " + [int]($RAM.TotalPhysicalMemory / 1MB) + " MB"
"""
s = winrm.Session('windows-host.example.com', auth=('用户名', '密码'))
r = s.run_ps(ps_script)
print(r.status_code)
print(r.std_out.decode())
低级API示例
如果你想有更细致的控制,比如禁用HTTPS证书验证:
from winrm.protocol import Protocol
p = Protocol(
endpoint='https://windows-host:5986/wsman',
transport='ntlm',
username='域名\\用户名',
password='密码',
server_cert_validation='ignore')
# 后续步骤同上,使用open_shell(), run_command(), get_command_output()等方法
项目API使用文档
pywinrm提供了几个核心类和方法来实现其功能,主要包括Session
类用于建立会话,以及在该会话下进行命令的执行(通过run_cmd
和run_ps
)。Protocol
类提供更为底层的操作接口,允许手动控制shell的生命周期和命令执行。
-
Session对象
__init__(endpoint, auth=None, transport=None, **kwargs)
run_cmd(command, args)
run_ps(ps_command)
-
Protocol对象
- 提供更多的自定义设置,如初始化时的
endpoint
,transport
,username
,password
等,并且提供了更详细的错误处理和配置选项。
- 提供更多的自定义设置,如初始化时的
高级特性与配置
-
传输协议与加密:pywinrm支持多种认证类型,包括
basic
,plaintext
,certificate
,ssl
,kerberos
,ntlm
, 和credssp
。默认情况下,WinRM通信需要加密,可通过使用HTTPS或特定的认证机制保证安全。 -
消息加密:可以设置
message_encryption
参数来控制是否和何时使用消息层加密,以适应不同的安全需求。 -
启用WinRM服务:在目标Windows主机上,可能需要配置或启动WinRM服务,尤其是当首次使用或在严格的安全环境中时。
确保在生产环境中遵循最佳实践,特别是在处理认证信息和加密设置时,避免不安全的配置,如无加密的HTTP通讯。通过本文档,用户应能够全面了解并有效运用pywinrm来满足远程管理系统的需求。