java如何执行远程服务器上的.sh文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何执行远程服务器上的.sh文件相关的知识,希望对你有一定的参考价值。
你可以使用JSch
JSch全称是“Java Secure Channel”
是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。同时也是支持执行命令;
以下是大概运行的代码,只是提供大致思路,可以去查官方API和demo
import com.jcraft.jsch.ChannelExec;import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSftp.LsEntry;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;
.......
try
Session session = new JSch().getSession(user, ip, port);
session.setPassword(pwd);
session.setConfig("StrictHostKeyChecking", "no");
session.setConfig("userauth.gssapi-with-mic", "no");
session.connect();
ChannelExec exec = (ChannelExec) session.openChannel("exec");
exec.setCommand("ifconfig");//这里是你要执行的命令,部分命令不支持,具体自己执行下
ByteArrayOutputStream bao = new ByteArrayOutputStream();
exec.setOutputStream(bao);
ByteArrayOutputStream baerr = new ByteArrayOutputStream();
exec.setErrStream(baerr);
exec.connect();
while (!exec.isEOF())
;
String errmsg = new String(baerr.toByteArray(), "utf-8");
if (StringUtils.notNull(errmsg))
throw new RuntimeException(errmsg);
else
System.out.println(new String(bao.toByteArray(), "utf-8"));
catch(Exception e)
e.printStackTrace();
finally
//关闭session等操作
参考技术A 拖不周奖澳填平慷
如何从linux上的rest服务执行sh文件
我在linux机器上用java编写了一个休息服务。
我正在使用:
p = Runtime.getRuntime().exec(cmmnd);
要么
ProcessBuilder pb = new ProcessBuilder(cmmnd).inheritIO();
p = pb.start();
p.waitFor();
我可以执行像mkdir
,touch
这样的命令......但是当我尝试运行sh文件时没有任何反应(例如:sudo sh /home/mydir/myfile.sh
)
这是一个许可问题吗?我怎么解决这个问题?
答案
这里只有文件执行权限不够。首先从命令提示符手动运行命令sudo sh /home/mydir/myfile.sh
并检查是否工作?你在sodo
要求输入密码吗?您执行命令的Web服务帐户是否有权以sudo
身份执行?还要检查您的Web应用程序是否具有位置的文件访问权限(意味着它是否可以执行cd /home/mydir/
)/home/mydir/myfile.sh
?
同样在你的代码中读取输出并检查实际错误是什么?
p.getOutputStream();
也尝试: -
ProcessBuilder pb = new ProcessBuilder("sudo sh /home/mydir/myfile.sh");
pb.redirectOutput(new File("/new_path/out.txt"));
Process p = pb.start();
try {
p.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
以上是关于java如何执行远程服务器上的.sh文件的主要内容,如果未能解决你的问题,请参考以下文章
linux怎么远程执行另一台linux机器上的shell文件?
sh 特定远程服务器上的Gulp init文件(可以在任何地方应用)