使用Winrm实现Linux环境下使用python执行远程命令

Winrm

WinRM(Windows Remote Management)windows远程管理,这个是基于[powershell](https://baike.baidu.com/item/Windows PowerShell ISE)的功能,一个形象的类比就是ssh之于linux。

winrm可以远程连接windows并执行cmd命令(使用python语言)

WinRM端口是5985和5986(HTTPS)

1、开启服务端winrm的服务

在window服务器上,要打开winrm服务。下面是操作流程:

第一步:用管理员权限打开windows powershell
第二步:首先查看winrm service的运行状态,默认情况是没有开启的;执行命令为空是没有启动。

winrm enumerate winrm/config/listener

第三步:对winrm service进行配置

winrm quickconfig

第四步:为winrm service 配置auth:

winrm set winrm/config/service/auth '@{Basic="true"}'
# winrm set winrm/config/service/auth '@{CredSSP="true"}' #凭据安全支持提供程序协议 (CredSSP)可以开启加密凭据的传输

第五步:为winrm service 配置加密方式为允许非加密:

winrm set winrm/config/service  '@{AllowUnencrypted="true"}'

检验是否配置成功

winrm get winrm/config/service/auth

2、python代码

python环境中

安装依赖包

pip install isodate
pip install xmlwitch

安装pywinrm

pip install pywinrm

使用session方法

 import winrm
 win = winrm.Session('http://windowsip:5985/wsman',auth=('windows管理员账户','windows管理员密码'))
 r = win.run_cmd('history')  #执行cmd命令 这里cmd中没有history的命令
 print(str(r.std_out,encoding='gbk'))  # 打印获取到的信息
 print(str(r.std_err,encoding='gbk')) #打印错误信息
 import winrm
 win = winrm.Session('http://windowsip:5985/wsman',auth=('windows管理员账户','windows管理员密码'))
 r = win.run_ps('history')  #执行powershell命令 可以执行一些cmd没有的命令,
 print(str(r.std_out,encoding='gbk'))  # 打印获取到的信息
 print(str(r.std_err,encoding='gbk')) #打印错误信息#因为cmd默认使用gbk编码,而python默认使用utf-8,所以要用gbk进行解码

使用Protocol方法

import winrm
conn = winrm.Protocol(endpoint='http://10.10.60.14:5985/wsman', transport='plaintext', username='administrator', password='password')

shell_id=conn.open_shell()

com=conn.run_command(shell_id,"dir") 

stdout, stderr, return_code = conn.get_command_output(shell_id, com) 

print "STDOUT: %s" % (stdout)
print "STDERR: %s" % (stderr)

3、客户端的连接

在这里插入图片描述

还可以参考链接:https://blog.csdn.net/weixin_33728268/article/details/92503351?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=1328741.25812.16169039449336133&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在Java中使用WinRM技术需要使用WinRM4j库,下面是一个简单的示例代码: ```java import com.github.kubesys.winrm.WinRMFactory; import com.github.kubesys.winrm.WinRmTool; import com.github.kubesys.winrm.exception.WinRMException; import com.github.kubesys.winrm.ssl.TrustAllCerts; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URI; import java.nio.charset.StandardCharsets; public class WinRMExample { public static void main(String[] args) throws IOException, WinRMException { String hostname = "remote-server.example.com"; String username = "remote-user"; String password = "remote-password"; String endpoint = String.format("https://%s:5986/wsman", hostname); WinRmTool.Builder builder = WinRMFactory.builder(endpoint, username, password); builder.setAuthenticationScheme(WinRmTool.AuthenticationScheme.NTLM); builder.setHttpsNoVerification(); builder.setListener(new WinRmTool.Listener() { @Override public void onStdout(String message) { System.out.println("STDOUT: " + message); } @Override public void onStderr(String message) { System.err.println("STDERR: " + message); } }); WinRmTool tool = builder.build(); tool.executeCommand("ipconfig"); // 上传文件 String remoteFile = "C:\\test\\file.txt"; String localFile = "/path/to/local/file.txt"; byte[] content = "Hello, World!".getBytes(StandardCharsets.UTF_8); try (FileOutputStream out = new FileOutputStream(new File(localFile))) { out.write(content); } tool.copyToRemote(localFile, remoteFile); // 下载文件 byte[] remoteContent = tool.copyFromRemote(remoteFile); String downloadedFile = "/path/to/downloaded/file.txt"; try (FileOutputStream out = new FileOutputStream(new File(downloadedFile))) { out.write(remoteContent); } } } ``` 在上面的示例代码中,我们使用WinRMFactory创建WinRmTool对象,并设置了远程服务器的连接参数、身份验证方式、HTTPS证书验证方式和监听器。然后我们调用executeCommand方法执行命令,并使用copyToRemote和copyFromRemote方法上传和下载文件。需要注意的是,如果远程服务器没有安装WinRM服务,需要先安装WinRM服务并启用WinRM服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值