安装maven依赖
<!-- jsch的方式 远程连接的包--> <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version> </dependency>
核心代码展示
/** * 执行相关的命令(输入式) * @param shellScript 执行脚本命令 * @param sshHost 远程连接地址 * @param sshPort 端口号 * @param sshUser 账号 * @param sshPass 密码 * @return */ public static boolean shShell(String shellScript, String sshHost, Integer sshPort, String sshUser, String sshPass) { boolean flag = true; Session jschSession = null; System.out.println(sshHost); System.out.println(sshPort); System.out.println(sshUser); System.out.println(sshPass); try { InputStream in = null; JSch jsch = new JSch(); jschSession = jsch.getSession(sshUser, sshHost,sshPort); //密码认证 jschSession.setPassword(sshPass); //SSH授权客户端位置,测试环境设置免授权,生产环境可对应服务器授权 //jsch.setKnownHosts(SSHConfig.SSH_PATH); Properties config = new Properties(); config.put("StrictHostKeyChecking","no"); jschSession.setConfig(config); // jschSession = JschUtil.getSession(sshHost, sshPort, sshUser, sshPass); //SSH授权客户端位置,测试环境设置免授权,生产环境可对应服务器授权 // jsch.setKnownHosts(SSHConfig.SSH_PATH); // Properties config = new Properties(); // config.put("StrictHostKeyChecking","no"); // jschSession.setConfig(config); //创建连接 jschSession.connect(5000); //建立可执行管道 ChannelExec channelExec = (ChannelExec) jschSession.openChannel("exec"); //执行脚本 channelExec.setCommand(shellScript); //获取执行脚本可能出现的错误日志 channelExec.setErrStream(System.err); //执行脚本输出结果 in = channelExec.getInputStream(); //设置超时时间 channelExec.connect(3000); byte[] tmp = new byte[1024]; while (true) { while (in.available() > 0) { int i = in.read(tmp, 0, 1024); if (i < 0) break; System.out.println("脚本执行过程:" + new String(tmp, 0, i)); } //获取执行结果 if (channelExec.isClosed()) { if (in.available() > 0) continue; if (channelExec.getExitStatus() != 0) { //脚本非正常结束,退出吗非零 flag = false; System.out.println("脚本执行出错"); } break; } try { Thread.sleep(1000); } catch (Exception e) { } } channelExec.disconnect(); } catch (Exception e) { e.printStackTrace(); System.out.println("catch"); System.out.println("脚本执行出错"); flag = false; } finally { if (jschSession != null) jschSession.disconnect(); } return flag; }
注意
如果权限不够(不是root用户)
则通过 sudo 命令的方式 执行