目录[-]
一 Python连接win方案介绍
远程操作Win机器有如下两种方式:
方式一:使用WinRM(Windows Remote Management)windows远程管理
方式二:服务器上搭建SSH sever,通过ssh远程连接,python有个专门ssh模块
下面我们使用如下两种方式操作
二 使用WinRM操作
WinRM(Windows Remote Management)windows远程管理,这个是基于powershell的功能,一个形象的类比就是ssh之于linux。这些年windows在server端上也极力向linux看齐,有兴趣的可以去了解下Windows Server Version 1709,就是一个只有Server Core,没有GUI的windows,Server Core和普通的带GUI图形界面的Windows Server 的主要区别如下:
-1 资源管理器没有了。我们熟悉的Windows Explorer,无法出现在Server Core里。 -2 所有依赖MMC的控制台界面没有了。也就是说运行*.msc将不会工作。例如:我们无法通过运行devmgmt.msc打开设备管理器了。 -3 除了区域和语言及时间,其他的控制面板选项也没有了。 -4 比较”著名”的IE也没有了
根据微软的说法:它可以提供强大的优势,如硬件要求较低、攻击面更小并且减小了更新需求。回到当前的主题,说下我的需求,之所以开WINRM,是内部一台主机跑有内部系统,系统运行在hyper-v上面的虚机里,平时出于安全是关闭的,只有在临时用的时候开下。目前想做的就是想一键搞定虚拟的关闭和开启
开启WinRM
1 查看winRM服务状态,默认都是未启动状态
winrm e winrm/config/listener
2 winRM服务启动
winrm quickconfig
3 为winrm service 配置auth
winrm set winrm/config/service/auth "@{Basic="true"}"
4 为winrm service 配置加密方式为允许非加密(这个不配置,远程连接会出错)
winrm set winrm/config/service "@{AllowUnencrypted="true"}"
5 查看winrm配置
winrm get winrm/config
我的配置如下:
更改网络为专用网络
注意:windows需要设置用户名和登录密码
安装winrm模块
pip3 install winrm
或者:
pip3 install pywinrm
他俩是一样的
远程连接windows并执行命令
import winrm
# 居然用http连接,那就是起了一个web服务呗
session = winrm.Session('http://10.0.0.5:5985/wsman', auth=('username', 'password'))
res = session.run_cmd('dir')
print(res.status_code)
print(res.std_out.decode('gbk'))
如果报错如下:
the specified credentials were rejected by the server
原因就是密码错误,
没有设置密码,
再就是winrm set winrm/config/service "@{AllowUnencrypted="true"}"没有设置
三、使用SSH sever方式
1.现在windows服务器上搭建ssh server
下载freesshd,下载链接:https://link.zhihu.com/?target=http%3A//www.freesshd.com/%3Fctt%3Ddownload
下载完成后,一路下一步安装即可
配置ssh
用户配置开启ssh必须要配置用户
依次选择--->Users--->Add--->添加一个lqz用户,选用用户密码方式(还有公钥私钥方式)--->选中可以使用的功能--->确定
端口,地址配置
我改成了88端口,我的22端口被占用了,监听 0.0.0.0地址
启动看到绿色,就是启动成功了
使用python远程操作执行命令
import paramiko
import re
#创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
# 连接服务器
ssh.connect(hostname='10.0.0.5',port=88,username='lqz',password='123')
# 执行命令
stdin,stdout,stderr = ssh.exec_command('ipconfig')
# 获取命令结果
result = stdout.read().decode('gbk')
print(result)
注意:一定要以管理员身份运行reeSSHd