centos7 配置 sftp 服务器并通过 java 上传文件

简介: centos7 配置 sftp 服务器并通过 java 上传文件

虚拟机配置



1、创建sftp用户组

groupadd sftp


2、添加用户

useradd -g sftp mysftp


3、设置用户密码

passwd mysftp


4、创建文件根目录

mkdir /app/data


5、将该目录设置到用户上

usermod -d /app/data mysftp


6、修改配置文件

vim /etc/ssh/sshd_config


7、找到 Subsystem ,将之前的配置注释掉,增加新的配置

#注释掉下面一行,改用自定义的
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp #这行指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp #这行用来匹配用户组
ChrootDirectory /app/data  #用chroot将用户的根目录指定到/app/data ,这样用户就只能在/app/data 下活动
AllowTcpForwarding no
ForceCommand internal-sftp #指定sftp命令


8、创建属于该用户的访问目录并设置用户组

mkdir /app/data/upload
chown -R mysftp:sftp /app/data/upload/
mkdir /app/data/download
chown -R mysftp:sftp /app/data/download/


9、重启sshd服务

service sshd restart


10、通过任意的sftp连接工具测试连接

我这边使用的是 WinSCP

连接后能看到下图说明服务正常(无法跳转到 /app/data 以外的路径才对,保护资源)


e0a0a53b06ca4b78a780b0b736aaffe7.png


java 代码



1、测试代码


public static void main(String[] args) {
    JSch jSch = new JSch();
    Session session = null;
    Channel channel = null;
    OutputStream outputStream = null;
    InputStream inputStream = null;
    ChannelSftp channelSftp;
    String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "<Message>\n" +
            "    <Data>我是一个测试文件</Data>\n" +
            "</Message>\n";
    try {
        session = jSch.getSession("mysftp", "192.168.141.100", 22);
        session.setPassword("xxxxxx");
        Properties properties = new Properties();
        properties.setProperty("StrictHostKeyChecking", "no");
        session.setConfig(properties);
        session.connect(30000);
        channel = session.openChannel("sftp");
        channel.connect(30000);
        channelSftp = (ChannelSftp) channel;
        channelSftp.cd("/upload");
        outputStream = channelSftp.put("test.xml");
        inputStream = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8));
        byte[] b = new byte[1024];
        int n;
        while ((n = inputStream.read(b)) != -1) {
            outputStream.write(b, 0, n);
        }
        outputStream.flush();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (null != outputStream) {
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (null != inputStream) {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (null != session) {
            session.disconnect();
        }
        if (null != channel && channel.isConnected()) {
            channel.disconnect();
        }
    }
}


2、执行完成后,会在服务器中的 upload 文件夹内生成一个 xml 文件

b340224f39cf4ce3aa2ef891443289a9.png

3、说明


在 java 程序中 cd 的路径不是服务器的绝对路径,而是以当前用户为起点的目录(channelSftp.cd("/upload");


这个路径可以在服务器中查看:

[root@root /]# sftp mysftp@127.0.0.1
mysftp@127.0.0.1's password: 
Connected to 127.0.0.1.
sftp> pwd
Remote working directory: /
sftp> 


其他



在 linux 服务器中查看 22 端口的连接情况(连接个数,ip)


netstat -anp | grep :22 | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n


这个命令的含义是:

netstat -anp:列出所有的网络连接

grep :22:筛选出SSH端口连接

grep ESTABLISHED:筛选出已经建立的连接

awk '{print $5}':提取出连接的IP地址和端口号

cut -d: -f1:只保留IP地址

sort:按IP地址排序

uniq -c:统计每个IP连接的个数

sort -n:按连接数排序,从少到多

相关文章
|
1天前
|
Java Linux iOS开发
如何配置 Java 环境变量:设置 JAVA_HOME 和 PATH
本文详细介绍如何在Windows和Linux/macOS系统上配置Java环境变量。
37 12
|
5天前
|
Java
CentOS7.8配置Adoptium-Java17运行环境
本指南介绍如何设置清华镜像源并安装 Temurin-17-JRE 运行环境。首先,编辑 `/etc/yum.repos.d/adoptium.repo` 文件,配置清华镜像源。接着,使用 `yum install -y temurin-17-jre` 命令安装 Temurin-17-JRE,并通过 `java --version` 验证安装成功。相关配置和操作界面截图附后。
22 8
|
1天前
|
前端开发 NoSQL Java
【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
本文介绍了如何配置和启动基于Java的若依(RuoYi)项目,涵盖后端和前端的详细步骤。首先,准备Redis、MySQL以及IDE(如Idea和VS)。接着,通过GitHub获取代码并导入到IDE中,执行必要的SQL文件和配置数据库密码。然后,启动Redis并进行相关配置。最后,按照前端配置步骤克隆前端代码库,打开终端执行命令完成前端配置。整个过程详细记录了每一步的操作,帮助开发者顺利部署若依项目。 如果你觉得有帮助,请点赞、关注和收藏,这将是我持续分享的动力!
16 1
|
1天前
|
前端开发 Java 开发工具
Git使用教程-将idea本地Java等文件配置到gitte上【保姆级教程】
本内容详细介绍了使用Git进行版本控制的全过程,涵盖从本地仓库创建到远程仓库配置,以及最终推送代码至远程仓库的步骤。
11 0
|
2月前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
75 2
|
3月前
|
安全 Java 数据安全/隐私保护
如何配置 Java 安全管理器来避免访问控制异常
配置Java安全管理器以防止访问控制异常,需在启动JVM时通过 `-Djava.security.manager` 参数启用,并设置安全策略文件,定义权限规则,限制代码执行操作,确保应用安全。
258 1
|
3月前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
186 1
|
10天前
|
弹性计算 数据挖掘 应用服务中间件
阿里云轻量应用服务器68元与云服务器99元和199元区别及选择参考
目前阿里云有三款特惠云服务器,第一款轻量云服务器2核2G68元一年,第二款经济型云服务器2核2G3M带宽99元1年,第三款通用算力型2核4G5M带宽199元一年。有的新手用户并不是很清楚他们之间的区别,因此不知道如何选择。本文来介绍一下它们之间的区别以及选择参考。
236 87
|
3天前
|
存储 弹性计算 应用服务中间件
阿里云轻量应用服务器出新品通用型实例了,全球26个地域可选
近日,阿里云再度发力,推出了首款全新升级的轻量应用服务器——通用型实例。这款服务器实例不仅标配了200Mbps峰值公网带宽,更在计算、存储、网络等基础资源上进行了全面优化,旨在为中小企业和开发者提供更加轻量、易用、普惠的云计算服务,满足其对于通用计算小算力的迫切需求。目前,这款新品已在全球26个地域正式上线,为全球用户提供了更加便捷、高效的上云选择。
|
20天前
|
机器学习/深度学习 人工智能 PyTorch
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
阿里云GPU云服务器怎么样?阿里云GPU结合了GPU计算力与CPU计算力,主要应用于于深度学习、科学计算、图形可视化、视频处理多种应用场景,本文为您详细介绍阿里云GPU云服务器产品优势、应用场景以及最新活动价格。
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考