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(); } } }