apache mina实现sftp的文件上传与权限修改功能

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

    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值