linux创建sftp账号实现账号密码登陆并用java实现sftp拉取文件
创始人
2024-05-06 21:54:51
0

目录

创建sftp账号

linux sftp登陆

java通过sftp账号拉取文件


 

创建sftp账号

1. 创建sftp根目录

mkdir -pv /app/sftp/

2.授权chomd 0755

chmod 0755 -R /app/sftp

3.创建用户组(此处名为sftp)

groupadd sftp

4.创建user用户data并指定用户组,指定home存储目录,设置不能登陆

useradd -g sftp -d /app/sftp/data/ -s /sbin/nologin data

/sbin/nologin 和 /bin/false 区别

/sbin/nologin

礼貌拒绝用户登录,给出友好提示。

/bin/false

不允许登录系统,没有任何提示

指定用户home路径可单独用命令

5.手动修改用户密码

passwd data

6.查看用户data的属性

id data

7.创建用户目录下的操作目录

mkdir upload

8.授予用户操作权限

chown data upload

9.备份好配置并修改

cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak$(date +%Y-%m-%d)

末行添加配置
注释掉Subsystem sftp /usr/libexec/openssh/sftp-server

添加:

Subsystem sftp internal-sftp
Match User sftp
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
ChrootDirectory /app/sftp

linux sftp登陆

①sftp data@127.0.0.1(sftp -P {port} {username}@{ip})
    passwd:输入密码

②使用工具lftp

     lftp sftp://{username}@{ip}:{port}

     回车输入密码

java通过sftp账号拉取文件

1.添加依赖

jakarta.jsonjakarta.json-api2.1.1

2.在配置文件中进行参数配置(也可不配置,直接在代码中写)

sftp:ip: xxx.xxx.xx.xxport: xxxtimeout: 60000retryTime: 3admin:username: xxxpassword: xxx

3.代码


import com.java.domaincollect.service.AuthDigAsync;
import com.jcraft.jsch.*;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Vector;@Component
public class SftpTask extends Thread {private ChannelSftp sftp;private Session session;@Value("${sftp.admin.username}")private String username;@Value("${sftp.admin.password}")private String password;@Value("${sftp.ip}")private String host;@Value("${sftp.port}")private Integer port;@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Autowiredprivate AuthDigAsync authDigAsync;/*** 建立sftp连接*/private void connect(){try {JSch jSch = new JSch();session = jSch.getSession(username, host, port);session.setPassword(password);session.setConfig("StrictHostKeyChecking", "no");session.connect();Channel channel = session.openChannel("sftp");channel.connect();sftp = (ChannelSftp) channel;System.out.println("connect Complete ---------");}catch (JSchException e) {e.printStackTrace();}}/*** 关闭sftp连接*/public void close(){try {if (sftp != null) {if (sftp.isConnected()) sftp.disconnect();}if(session != null){if (session.isConnected()) session.disconnect();}} catch (Exception e) {e.printStackTrace();}}/*** 下载文件到本地** @param source          源文件* @param target          目标文件* @throws SftpException      异常* @throws FileNotFoundException  异常*/@SneakyThrowspublic void download(String source, String target) throws SftpException, FileNotFoundException {connect();InputStream inputStream = sftp.get(source);Reader reader = null;Date date = new Date();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");String format = simpleDateFormat.format(date);try {reader = new InputStreamReader(inputStream,"UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}LineNumberReader lnr = new LineNumberReader(reader);String line = lnr.readLine();int sum = 0;List all=new ArrayList<>();while (line!=null) {System.out.println(line);all.add(line);sum += 1;line = lnr.readLine();if (all.size() == 100 || line == null) {stringRedisTemplate.opsForList().rightPushAll("domain" + format, all);all.clear();authDigAsync.getAuth(all);}}sftp.get(source,target);
//        sftp.get(source, new FileOutputStream(new File(target)));}}
public void test(){try {System.out.println("start-----------------");sftpTask.download("/upload/result.txt","/opt");} catch (IOException e) {e.printStackTrace();} catch (SftpException e) {e.printStackTrace();}}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...