借助 pywinrm 模块,实现脚本远控 windows 的目的
结合之前一篇 paramiko 模块,算是打通了 windows 与 Linux 之间的互访
pywinrm 模块
windows 除了通过图形远程访问
其实也可通过命令行访问
python 借助 pywinrm 模块
可以实现远程访问 Windows 的 cmd、powerShell
执行 dos 命令 ,达到远程管理的目的
一、控制端安装 pywinrm
环境要求[^1]
- Linux, Mac or Windows
- Cpython 2.6 - 2.7, 3.3-3.5 or PyPy2
1. 外网
pip install pywinrm
2. 内网
根据系统,下载合适的离线安装包
pip install pywinrm-0.4.3-py2.py3-none-any.whl
二、被控端 windows 开启 winrm 服务
被控制系统:windows 7
1. 检查服务监听情况
已经开启回输出如下信息,未开启则无信息输出
winrm enumerate winrm/config/listener
or
winrm e winrm/config/listener
Listener
Address = *
Transport = HTTP
Port = 5985
Hostname
Enabled = true
URLPrefix = wsman
CertificateThumbprint
ListeningOn = 10.10.10.10, 127.0.0.1, ::1, ...
...skip...
2. 启动 winrm 服务
先用管理员权限,运行 cmd
再执行下面的命令
winrm quickconfig -q # 静默启动
检查是否启动
winrm e winrm/config/listener
or
netstat -ano | findstr 5985
三、查看 config 信息
几个基本的配信息查询命令
根据自己需要,查询需要配置的字段
- AllowUnencrypted
- Basic
- TrustedHosts
-
查看 config:
winrm get winrm/config
包含了 Client 、Service、Winrs 的信息Config ...skip... Client ...skip... Service ...skip... Winrs ...skip...
-
只查看 Client:
winrm get winrm/config/client
Client
NetworkDelayms = 5000
URLPrefix = wsman
AllowUnencrypted = true
AUTH
Basic = true
Digest = true
...skip
DefaultPorts
HTTP = 5985
HTTPS = 5986
TrustedHosts = *
- 只查看 Service:
winrm get winrm/config/service
Service
...skip...
AllowUnencrypted = true
AUTH
Basic = true
Digest = true
...skip
DefaultPorts
HTTP = 5985
HTTPS = 5986
TrustedHosts = *
忘记有那些参数要配置了,或是需要确认字段配置生效,运行上述命令检查即可。
四、配置 winrm service
winrm set winrm/config/service/ @{AllowUnencrypted="true"}
winrm set winrm/config/service/auth @{Basic="true"}
五、配置 winrm client
winrm set winrm/config/client @{AllowUnencrypted="true"}
winrm set winrm/config/client @{TrustedHosts="*"}
winrm set winrm/config/client/auth @{Basic="true"}
基本用法
配置好上述字段后,我们就能通过 pywinrm
,像 paramiko
模块通过ssh一样
远程执行 cmd、powerSehll 命令了
import winrm
s = winrm.Session('10.244.14.24:5985', auth('username', 'passwd'), transport='ntlm')
r = s.run_cmd('whoami')
r.status_code # 0 为正常
r.std_out # bytes 得到的正常执行结果
r.std_err # bytes 无异常消息为空字节串
谢谢分享
谢谢分享,学习了
继续加油哦,争取发表更多优秀帖子
感谢分享,插眼学习
感谢分享,谢谢楼主,赞
感谢分享,谢谢楼主,赞
谢谢,分享学习了
谢谢分享,学习了
辛苦了,学习一下
继续加油哦,争取发表更多优秀帖子
又学习到了,写的非常好😁
真棒,感谢分享!
这真是个好文章,谢谢
又学习到了,写的非常好
谢谢大佬分享,谢谢!
真棒,感谢分享!