java通过winrm4j远程连接win执行命令

本文介绍如何利用WinRM协议实现Windows系统的远程管理。详细解释了WinRM相较于SSH和Telnet的优势,并提供了使用Java库winrm4j进行远程执行Windows命令的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:为什么使用winrm?

    在Linux /UNIX/WINDOWS系统中,一般通过远程连接的方式在远端执行脚本命令或者其他,是通过SSH或者Telnet。笔者之前写过几遍运用JAVA使用SSH或者TELNET连接操作系统执行命令的博客。但这些协议之间存在的差别的。

在LINUX、UNIX系统中一般通过SSH协议来登录、执行命令;

而在Windows操作系统中,由于没有自带SSH协议,一般通过Telnet协议去登录、执行命令;但是Telnet服务默认是不开启的。所以在大规模环境中,操作比较麻烦。另外Telnet协议存在安全问题。

如果不需要执行命令,而是通过远程桌面的形式来操作windows,可以使用RDP协议,java有一个开源的项目properJavaRDP,可以在web页面或者GUI形式提供实现方案。

接回本题:

 

Windows远程管理(WinRM)

Server2008R2中默认开启该服务,从Server2012开始,该服务便集成在系统中默认开启,Win7默认安装此服务,但是默认为禁用状态,Win8,Win10默认开启。

所以可以通过这种winrm来实现。

winrm4j

maven导入

<dependency>
  <groupId>io.cloudsoft.windows</groupId>
  <artifactId>winrm4j</artifactId>
  <version>0.5.0</version> <!-- WINRM4J_VERSION -->
</dependency>

测试代码:

    

package com.test;

import org.apache.http.client.config.AuthSchemes;

import io.cloudsoft.winrm4j.client.WinRmClientContext;
import io.cloudsoft.winrm4j.winrm.WinRmTool;
import io.cloudsoft.winrm4j.winrm.WinRmToolResponse;

public class RemoteWinrm4JTest {

    public static void main(String[] args)  {
        WinRmClientContext context = WinRmClientContext.newInstance();
        WinRmTool.Builder builder = WinRmTool.Builder.builder("ip", "username", "password");
        builder.setAuthenticationScheme(AuthSchemes.NTLM);
        builder.port(5985);
        builder.useHttps(false);
       
        builder.context(context);
        WinRmTool tool =  builder.build();
        tool.setOperationTimeout(5000L);
        System.out.println("========");
        String command = "dir";
        WinRmToolResponse resp = tool.executeCommand(command);
        System.out.println(resp.getStatusCode());
        String out = resp.getStdOut();
        System.out.println(out);
        context.shutdown();
        
    }

}

遇到问题及解决:

服务端winrm修改设置:

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

 https://stackoverflow.com/questions/46299280/winrm4j-authorization-loop-detected-on-conduit-on-url-with-realm-null


评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值