java經過winrm4j遠程鏈接win執行命令

說明:爲何使用winrm?java

    在Linux /UNIX/WINDOWS系統中,通常經過遠程鏈接的方式在遠端執行腳本命令或者其餘,是經過SSH或者Telnet。筆者以前寫過幾遍運用JAVA使用SSH或者TELNET鏈接操做系統執行命令的博客。但這些協議之間存在的差異的。web

在LINUX、UNIX系統中通常經過SSH協議來登陸、執行命令;apache

而在Windows操做系統中,因爲沒有自帶SSH協議,通常經過Telnet協議去登陸、執行命令;可是Telnet服務默認是不開啓的。因此在大規模環境中,操做比較麻煩。另外Telnet協議存在安全問題。windows

若是不須要執行命令,而是經過遠程桌面的形式來操做windows,能夠使用RDP協議,java有一個開源的項目properJavaRDP,能夠在web頁面或者GUI形式提供實現方案。安全

接回本題:maven

 

Windows遠程管理(WinRM)ide

Server2008R2中默認開啓該服務,從Server2012開始,該服務便集成在系統中默認開啓,Win7默認安裝此服務,可是默認爲禁用狀態,Win8,Win10默認開啓。oop

因此能夠經過這種winrm來實現。測試

winrm4jui

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

相關文章
相關標籤/搜索