1.在pom文件添加依赖:
<dependency>
<groupId>ch.ethz.ganymed</groupId>
<artifactId>ganymed-ssh2</artifactId>
<version>build210</version>
</dependency>
2.上传到linux服务器指定文件夹方法 代码如下:
package com.longjin.comm.utils;
import ch.ethz.ssh2.*;
import java.io.*;
import java.net.HttpURLConnection;
/**
* @Description:上传文件到指定服务器目录
* @Author 何志鹏
* @Date 2020/6/11 23:14
* @Version 1.0
*/
public class GanymedSsh2Utils {
/**
* 上传pdf到指定服务器中
*
* @param dataServerIp linux环境ip
* @param dataServerUsername linux环境用户名
* @param dataServerPassword linux环境登录密码
* @param dataServerDestDir linux环境文件目录
* @param localDir 本地上传目录
*/
public static void uploadPdf(String dataServerIp,String dataServerUsername,String dataServerPassword, String dataServerDestDir,String localDir ){
//文件scp到数据服务器
Connection conn = new Connection(dataServerIp);
SFTPv3Client sftpClient = null;
Session session = null;
System.out.println("开始scp文件");
try {
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword(dataServerUsername, dataServerPassword);
if (isAuthenticated == false)
throw new IOException("Authentication failed.文件scp到数据服务器时发生异常");
//执行远程命令,成功
session = conn.openSession();
session.execCommand("cd "+dataServerDestDir);//分号隔开执行多条指令
//显示执行命令后的信息
InputStream stdout = new StreamGobbler(session.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
while (true) {
String line = br.readLine();
if (line == null) {
System.out.println("session,远程服务器返回信息:空");
break;
}
System.out.println("session,远程服务器返回信息:" + line);
}
//获得退出状态
System.out.println("session,ExitCode: " + session.getExitStatus());//返回0 表示命令执行成功;返回1 表示执行失败
session.close();
//远程文件复制到本地成功
SCPClient client = new SCPClient(conn);
File file = new File(localDir);
File[] files = file.listFiles();
for(int i = 0;i<files.length;i++){
System.err.println(files[i]);
client.put(files[i].toString(), dataServerDestDir,"0644");//上传到Linux文件目录 0644是指定读取权限
}
// client.get(dataServerDestDir + "10092/input/10092.zip", localDir); //成功,远程scp到本地
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件scp到数据服务器时发生异常");
if (conn != null) {
conn.close();
}
if (sftpClient != null) {
sftpClient.close();
}
if (session != null) {
session.close();
}
} finally {
if (conn != null) {
conn.close();
}
if (sftpClient != null) {
sftpClient.close();
}
if (session != null) {
session.close();
}
}
}
}
3.main方法调用上传结果如下: