Java 实现 SFTP 操作

1、创建 SFTP 用户

    /**
     * 新增SFTP用户
     *
     * @param tblSftpUser SFTP用户
     * @return 结果
     */
    @Override
    public int insertTblSftpUser(TblSftpUser tblSftpUser) {
        tblSftpUser.setCreateTime(DateUtilT.getNowDate());
        tblSftpUser.setSftpPath(rootDir + tblSftpUser.getSftpUsername());
        int row = tblSftpUserMapper.insertTblSftpUser(tblSftpUser);
        if (row > 0) {
            SFTPConfig config = new SFTPConfig();
            config.setHost(host);
            config.setPort(Integer.parseInt(port));
            config.setUsername(username);
            config.setPassword(password);
            String sftpUser = tblSftpUser.getSftpUsername();
            String sftpUserPwd = tblSftpUser.getSftpPassword();
            String permission = tblSftpUser.getSftpPerms();

            StringBuffer sb = new StringBuffer();
            //1.创建SFTP用户
            sb.append("useradd -g ").append(userGroup).append(" -s /usr/sbin/nologin ").append(sftpUser).append(";")
                    //2.修改密码
                    .append("echo ").append(sftpUser).append(":").append(sftpUserPwd).append(" | sudo chpasswd;")
                    //3.创建目录并授权
                    .append("mkdir -pm ").append(permission).append(" ").append(rootDir).append(sftpUser).append("/home");
            ChannelExecUtils.getChannel(config, sb.toString());
        }
        return row;
    }
public class ChannelExecUtils {

    //等待时间,单位毫秒
    private static final int TIMEOUT = 30000;

    private static final Logger LOG = LoggerFactory.getLogger(ChannelExecUtils.class);


    public static void getChannel(SFTPConfig sftpDetails, String command) {
        String ftpHost = sftpDetails.getHost();
        int ftpPort = sftpDetails.getPort();
        String ftpUserName = sftpDetails.getUsername();
        String ftpPassword = sftpDetails.getPassword();
        Channel channel = null;
        Session session = null;
        try {
            JSch jsch = new JSch(); // 创建JSch对象
            session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 根据用户名,主机ip,端口获取一个Session对象
            if (ftpPassword != null) {
                session.setPassword(ftpPassword); // 设置密码
            }
            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            config.put("PreferredAuthentications", "password");
            config.put("X11Forwarding", "no");
            session.setConfig(config); // 为Session对象设置properties
            session.setTimeout(TIMEOUT); // 设置timeout时间
            session.connect(); // 通过Session建立链接
            channel = session.openChannel("exec"); // 打开执行shell指令通道
            ChannelExec channelExec = (ChannelExec) channel;
            channelExec.setCommand(command);
            channel.setInputStream(null);
            channelExec.setErrStream(System.err);
            channel.connect(); // 建立执行shell指令通道的连接
            LOG.debug("Connected successfully to ftpHost = " + ftpHost + ",as ftpUserName = " + ftpUserName + ", command = " + command);
        } catch (JSchException e) {
            LOG.error("exec error :{}", e.getMessage(), e);
            throw new UtilException("exec error");
        } finally {
            if (channel != null) {
                channel.disconnect();
            }
            if (session != null) {
                session.disconnect();
            }
        }
    }

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Java实现SFTP(Secure File Transfer Protocol)功能,你可以使用JSch库。JSch是一个开源的Java实现SSH2协议的库,它提供了连接和操作远程服务器的功能。 以下是一个简单的示例代码,演示了如何使用JSch库实现SFTP操作: ```java import com.jcraft.jsch.*; public class SftpExample { public static void main(String[] args) { String hostname = "remote-host"; int port = 22; String username = "username"; String password = "password"; String srcFile = "local-file.txt"; String destDir = "/remote-directory/"; try { JSch jsch = new JSch(); Session session = jsch.getSession(username, hostname, port); session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); session.connect(); ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp"); channelSftp.connect(); // 上传文件 channelSftp.put(srcFile, destDir); // 下载文件 // channelSftp.get(srcFile, destDir); channelSftp.disconnect(); session.disconnect(); } catch (JSchException | SftpException e) { e.printStackTrace(); } } } ``` 在上述示例中,你需要将"remote-host"替换为目标服务器的主机名或IP地址,将"username"和"password"替换为登录服务器所需的凭据。然后,你可以使用`channelSftp.put`方法上传本地文件到远程目录,或者使用`channelSftp.get`方法从远程目录下载文件。 请注意,你需要在项目中添加JSch库的依赖。你可以从Maven中央存储库或JSch的官方网站(http://www.jcraft.com/jsch/)下载并添加相应的JAR文件。 希望这可以帮助你实现Java中的SFTP功能!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值