import org.apache.sshd.client.SshClient;
import org.apache.sshd.client.channel.ChannelExec;
import org.apache.sshd.client.channel.ClientChannel;
import org.apache.sshd.client.session.ClientSession;
import org.apache.sshd.client.subsystem.sftp.SftpClient;
import org.apache.sshd.client.subsystem.sftp.SftpClientFactory;
import org.apache.sshd.client.subsystem.sftp.fs.SftpFileSystem;
import org.apache.sshd.common.channel.Channel;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class sftpUtils {
private String ip;
private String pwd;
private String name;
private int port;
private SshClient client;
private ClientSession session;
private SftpFileSystem fs;
private SftpClient sftp;
public sftpUtils(String ip, String pwd, String name, int port) {
this.ip = ip;
this.pwd = pwd;
this.name = name;
this.port = port;
}
public void connection() {
client = SshClient.setUpDefaultClient();
client.start();
try {
session = client.connect(name, ip, port).verify().getSession();
session.addPasswordIdentity(pwd);
session.auth().verify();
sftp = SftpClientFactory.instance().createSftpClient(session);
fs = SftpClientFactory.instance().createSftpFileSystem(session);
} catch (IOException e) {
e.printStackTrace();
}
}
public void upload(String remoteDir,String remoteFile, String local) {
try {
Path remotePath = fs.getDefaultDir().resolve(remoteDir);
Files.createDirectories(remotePath); // 创建多层目录
System.out.println("local " + Paths.get(local));
Files.copy(Paths.get(local), remotePath.resolve(remoteDir).resolve(remoteFile)); // 将目标文件拷贝至目标目录
} catch (IOException e) {
e.printStackTrace();
}
}
public void chmod(String remoteFile, int chmod) {
try {
String cmd = "chmod " + String.valueOf(chmod) + " " + remoteFile;
ChannelExec channel = session.createExecChannel(cmd);
channel.open();
ByteArrayOutputStream msg = new ByteArrayOutputStream();
channel.setErr(msg);
System.out.println(msg.toString());
Integer exitStatus = channel.getExitStatus();
System.out.println(exitStatus);
} catch (IOException e) {
e.printStackTrace();
}
}
}