java操作linux命令 开发环境在windos 生产在linux

我是通过yml区分开发和生产 也可以通过git分支等待来区分

最重要的在最下面 记得关注查看哦 因为这个可能设计到你的人生转折 🤭🤭

首先安装依赖jsch包

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

yml展示

spring:
  resources:
    static-locations: file:D:\ay
  messages:
    basename: i18n/messages
## 这个是用来区分使用那个yml  我也用来区分生产
  profiles: 
    active: druid

windos在开发下进行操作linux命令

@Value("${spring.profiles.active}")
    private String code;
public void del(String cmd) {
        if (code.equals(CommonConstants.ifDev)) { //判断是开发还是生产
            String host = ip; //对应ip
            int port = this.port;
            String username = this.username;
            String password = this.password;
            try {
                JSch jsch = new JSch();
                Session session = jsch.getSession(username, host, port);
                session.setPassword(password);
                session.setConfig("StrictHostKeyChecking", "no");
                session.connect();
                Channel channel = session.openChannel("exec");
                ((ChannelExec) channel).setCommand(cmd);
                channel.setInputStream(null);
                ((ChannelExec) channel).setErrStream(System.err);
                channel.connect();
                InputStream in = channel.getInputStream();
// 读取执行结果
                byte[] buffer = new byte[1024];
//                StringBuilder result = new StringBuilder();
                while (true) {
                    int bytesRead = in.read(buffer, 0, buffer.length);
                    if (bytesRead < 0) {
                        break;
                    }
                }
                channel.connect();
                channel.disconnect();
                session.disconnect();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            this.getCmd(cmd);
        }

this.getCmd()方法就是我的项目部署在linux服务器上进行操作的方法

这样的话直接传命令进去 服务器就会执行啦

public void getCmd(String cmd) {
//        String command = "rm -rf '"+"/workspace/nfs-data/minio-minio-pvc-5b8d2721-69e2-49e2-a984-8d89d753efbb/dyg-fzzn";
        // Create ProcessBuilder and set the working directory
        ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", cmd);
        processBuilder.start();
    }

注注: !!!!!!!!!!!!!!!!!!!!

这样会有注入的风险 一定要做好处理 !!!!!!!!!

万一被注入拼接 rm -rf 你就完啦

我的处理是对接口进行加密处理 需要的话我可以提供代码和思路 

我明天更新吧

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值