我是通过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 你就完啦
我的处理是对接口进行加密处理 需要的话我可以提供代码和思路
我明天更新吧