CentOS远程操作Windows端授权(使用CMD方式)

前言

上一篇已经基本阐述了CentOS如何远程到目标Windows服务器并执行授权的方式,此篇为additional内容,通过cmd方式进行授权,相对于Powershell方式授权,更加方便
附:centOS操作实践

Windows服务器

ip192.168.50.224
userNamessikme

准备工作

1. CentOS可ping通windows服务器

2. Windows服务器已预装openssh

3. CentOS可ssh到windows服务器

附:
安装openssh方式:
(1)方式一
(2)方式二

执行步骤

添加依赖

 <dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

Java脚本

package com.yzr;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

import com.jcraft.jsch.*;

public class testSSH {

    public static void main(String[] args) {
        login();
    }

    public static void login() {
        // 本地
        String username = "ssikme";
        String hostip = "192.168.50.224";
        String password = "yzr19980330";
        // 使用 JSch 进行 SSH 连接
        try {
            JSch jsch = new JSch();
            Session session = jsch.getSession(username, hostip, 22); // 指定用户名、主机名和端口号
            // 关闭 StrictHostKeyChecking,以避免第一次连接时的主机密钥验证
            session.setConfig("StrictHostKeyChecking", "no");

            session.setPassword(password); // 输入服务器密码
            session.connect();

            // 执行多条指令
            List<String> commands = new ArrayList<>();
            //commands.add("dir D:\\yzrtest /b");
            //commands.add("net use Z: \\\\192.168.40.123\\nas password /user:PBSTEST\\zhry");
            commands.add("wmic logicaldisk get name");
            commands.add("icacls \"D:\\yzrtest\" /grant Everyone:(OI)(CI)(F) /c");
            List<String> result = getCmdResult(session, commands);
            result.forEach((x)-> System.out.println(x));
            session.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("连接失败");
            return;
        }
        System.out.println("链接成功");
    }

    //用来执行命令
//Session表示传递连接对话,commands表示传递命令集合
    public static List<String> getCmdResult(Session session , List<String> commands){
        //用来存放命令的返回值
        List<String> cmdResult = new ArrayList<>();
        for (String command : commands) {
            System.out.println(command);
            Channel channel = null;
            try {
                //创建执行通道
                channel = session.openChannel("exec");
                //设置命令
                ((ChannelExec) channel).setCommand(command);
                //连接通道
                channel.connect();
                //读取通道的输出
				//存放命令的执行结果,如果结果有很多行,则每次line的值不同
                String line;
                //lines用来拼接line结果
                StringBuffer lines = new StringBuffer();

                // 3. 获取标准输入流
                BufferedReader inputStreamReader = new BufferedReader(new InputStreamReader(
                        ((ChannelExec) channel).getInputStream(), "GBK"));
                // 4. 获取标准错误输入流
                BufferedReader errInputStreamReader = new BufferedReader(new InputStreamReader(((ChannelExec) channel).getErrStream(), "GBK"));

                // 5. 记录命令执行 log
                while ((line = inputStreamReader.readLine()) != null) {
                    lines.append(line).append("\n");
                }

                // 6. 记录命令执行错误 log
                String errLine = null;
                while ((errLine = errInputStreamReader.readLine()) != null) {
                    lines.append(errLine).append("---------------------------------\n");
                }

                //如果命令执行没有返回值,则直接输出没有返回值
                if (String.valueOf(lines).equals("")){
                    cmdResult.add("命令["+command+"]执行成功,但没有返回值");
                }else {
                    //否则将每行返回直接存入到list中
                    cmdResult.add(String.valueOf(lines));
                }
                inputStreamReader.close();
                errInputStreamReader.close();
                channel.disconnect();
            } catch (JSchException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return cmdResult;
    }

}

验证

1、上传到CentOS环境

由于java脚本引用了其他依赖,建议打成jar包上传到CentOS环境中。这里建议使用xshell或secureCRT方式上传,如果直接在虚拟机内拖动上传,可能会异常,这是由于上传协议不同导致的。

2、运行jar包

java -jar testSSH.jar

3、运行完成

出现以下结果即为完成
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值