SFTP搭建(密码认证、密钥认证)、客户端连接、java代码连接

JSch - 配置SFTP服务器SSH免密登录 SFTP是一个安全文件传送协议,可以为传输文件提供一种安全的加密方法。SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式。SFTP是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。Jsch是一个纯粹的用java实现SSH功能的java library。如果要知道Jsch的功能需先了解一下SSH。 阅读详情
AI摘要

本文详细介绍了如何搭建SFTP服务器,包括设置用户、权限和密钥认证,以及使用Java代码通过JSch库实现文件上传和下载。

一、SFTP搭建

在一些情况下(如需要为商户提供对账文件),你需要一台文件服务器存放这些文件,并允许用户登陆这台文件服务器传输(上传和下载)文件,但是不允许使用SSH方式(如secureCRT)登录文件服务器,你只允许其访问指定根目录(/home/sftp)下文件,这样SFTP服务就能很好满足这种需求。sftp传输数据(文件)使用的依旧是SSH协议,linux开启了sshd就相当于开启了SFTP。注:搭建SFTP文件服务器不需求安装什么额外的包,除了SSH,ssh需要OpenSSH4.8p1以后的版本。因为要使用chroot设置根目录(用户能看见和访问的根目录)。

查看SSH版本

ssh -V

搭建步骤:

使用root操作

1、建SFTP组

groupadd sftp

创建完成后使用 cat /etc/group可以看到

2、创建用户 albert

useradd -g sftp -s /sbin/nologin -M albert

-g 加入到sftp组

-s 禁止ssh登陆

-M 不要自动建立用户的登陆目录(在/home下)

3、为albert用户设置密码

passwd albert

alan123456

重复输入两次同一密码

4、创建sftp存放文件的目录并设置文件拥有者

mkdir -p /dala/sftp/verifyfile

chown -R albert:sftp /data/sftp/verifyfile

chmod 755 /data/sftp/verifyfile

5、编辑配置文件/etc/ssh/sshd_config

注:修改配置文件前先备份原有正常配置文件,方面还原

cp /etc/ssh/sshd_confiig /etc/ssh/sshd_config.bak

vi /etc/ssh/sshd_config

注释掉Subsystem sftp /usr/libexec/openssh/sftp-server

在其下面添加

Subsystem sftp internal-sftp

在文件最后添加

Match Group sftp # 指定活动目录

ChrootDirectory /data/sftp # 指定根目录

ForceCommand internal-sftp # 强制执行内部SFTP,并忽略任何~/.ssh/rc中的命令

AllowTcpForwarding no # 禁用端口转发

X11Forwarding no # 禁用X11图形界面转发

6、重启sshd

service sshd restart

7、测试

sftp albert@ip

输入密码即可连接上

8、权限控制

按照上面的设置

chown albert:sftp /data/sftp/verifyfile

chmod 755 /data/sftp/verifyfile

albert是拥有/data/sftp/verifyfile文件的读写权限的

sftp组其他用户的权限是5,即没有写入权限

如新增用户 jack

useradd -g sftp -s /sbin/nologin -M jack

passwd jack

jack123456

重复输入两次同一密码

那么jack的权限只有5

9、以上只是基本操作,但可基于此依据你自己需求(用户、文件目录、权限)自行设计专属sftp文件服务器,对于不断新增特定目录、特定权限用户的操作,可以配合sheel脚本使用或基于脚本再开发前端页面方面操作。

10、rsa认证方式设置和登录

以上介绍的SFTP用户登录方式是sshd_config配置文件默认打开的密码验证方式。

PasswordAuthentication yes

再介绍一种实际中使用更多,更安全,更方面的用户登录验证方式,即密钥登录。

密钥登录无需用户设置密码,通过rsa密钥对加解密验证,在客户端和服务器端建立安全的连接,简单地说,public key放在服务器端,即下面配置的authorized_keys,private key放在客户端,客户端发起请求连接,服务器根据请求用户名识别对应客户端公钥,sshd服务产生一个随机数,用public key进行加密后,发回到客户端,客户端用private key解密得到该随机数,客户端将解密后的随机数发回服务器端,服务端进行匹配,匹配成功认证通过,允许登录。这种方式避免了密码暴力破解尝试的危险,当然密钥认证因为有加解密和随机数传输验证的过程,连接耗时自然比密码方式长些。

我们再新增可登录用户qingniu , 采用密钥验证方式登录

依旧用root操作

useradd -g sftp -s /sbin/nologin qingniu

不要再使用passwd为其设置密码

注意这里不要 -M , 因为我们需要useradd为新增用户在/home目录下自动建立用户的登陆目录,我们需要再/home/qingniu目录下设置密钥文件。

cd /home/qingniu

ll -a -- 可看到所有隐藏目录

mkdir .ssh --存放密钥文件和认证文件

ssh-keygen -t rsa

输入/home/qingniu/.ssh/id_rsa_qingniu

按回车键,不对密钥加密

再次按回车确认

成功在/home/qingniu/.ssh目录下生成一对密钥id_rsa_qingniu 、id_rsa_qingniu.pub

 

cd /home /qingniu/.ssh -- 进入密钥对所在目录

cat id_rsa_qingniu.pub >> authorized_keys -- 往authorized_keys文件中写入公钥key

接下来就是新增目录、密钥的权限和用户组设置,很重要,因为我们是用root用户操作这些目录和文件的。至于为什么按下面设置,请自行思考,其实也很简单。

chmod 600 /home/qingniu/.ssh/authorized_keys

chmod 700 /home/qingniu/.ssh

chown -R qingniu:sftp /home/qingniu/.ssh

为/etc/ssh/sshd_config添加配置

PermitRootLogin yes

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ss:h/authorized_keys

添加完成后保存再重启sshd服务

service sshd restart

把私钥id_rsa_qingniu导出,重新打开FileZilla用密钥认证方式登录测试

如果你只允许用户使用密钥认证登录,可以设置/etc/ssh/sshd_config文件

PasswordAuthentication no

如果不改,密钥认证和密钥认证两种登录方式都允许。

 

二、客户端连接

FileZilla下载地址:https://filezilla-project.org/download.php

按照安装引导安装即可

使用上面SFTP用户登陆测试

密码认证方式

输入 主机IP username password port(默认22)

密钥认证方式

编辑 -> 设置 -> sftp -> 添加密钥文件 -> 确认

输入 主机IP username 不填密码 port(默认22)

 

三、java代码连接

使用java代码语言实现与sftp服务器的文件传输,我们可以使用Jcraft公司开发的JSch包,JSch使用纯java语言实现了ssh2协议,感谢ssh2标准协议的制定,才使得我们能通过各种形态的客户端与服务器之间建立安全可靠的通信。因此实现了SSH2协议的JSch能做的也就不仅仅是文件传输,包括ssh协议实现的X11 GUI转发、端口转发、终端仿真等各种酷炫功能,所以学习JSch项目对于java程序员是有很必要的,那就从文件传输这个功能开始接触JSch这个项目吧。

       首先在项目中引入JSch包

<dependency>

      <groupId>com.jcraft</groupId>

      <artifactId>jsch</artifactId>

      <version>0.1.53</version>

</dependency>

 基于JSch包实现的SFTP服务器文件上传和下载功能代码如下:

package com.qing.niu.communication.sftp;

import com.jcraft.jsch.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Assert;

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * <p>
 *     Sftp工具类
 * </p>
 *
 * @author huqingniu
 * @version 1.0.0
 * @date 2018/12/24
 */
public class SftpTool {

    public static final Logger logger = LoggerFactory.getLogger(SftpTool.class);

    private String host;

    private String username;

    private int port;

    public SftpTool(String host, String username, int port){
        this.host = host;
        this.username = username;
        this.port = port;
    }

    /**
     * 登陆sftp
     *
     * @param authTypeMode 认证方式
     * @return 登陆信息
     */
    public Map<String,Object> loginIn(AuthTypeMode authTypeMode){
        //解决JSch日志打印问题
        JSch.setLogger(new SettleJschLogPrint());
        try {
            ChannelSftp sftp = null;
            Session session = null;

            JSch jsch = new JSch();
            logger.info("获取SFTP服务器连接username:{},host:{},port:{}",username,host,port);
            session = jsch.getSession(username,host,port);
            logger.info("连接成功建立");
            if (AuthTypeEnum.RSA.getCode().equals(authTypeMode.getAuthType())){
                jsch.addIdentity(authTypeMode.getAuthValue(),"");
            }else {
                session.setPassword(authTypeMode.getAuthValue());
            }
            Properties sshConfig = new Properties();
            sshConfig.put("StrictHostKeyChecking","no");
            sshConfig.put("PreferredAuthentications","publickey,gssapi-with-mic,keyboard-interactive,password");
            session.setConfig(sshConfig);
            session.connect();
            logger.info("用户" + username + "成功登陆");
            Channel channel = session.openChannel("sftp");
            channel.connect();
            sftp = (ChannelSftp) channel;

            HashMap<String,Object> loginInfo = new HashMap<>();
            loginInfo.put("sftp",sftp);
            loginInfo.put("session",session);
            return loginInfo;
        } catch (JSchException e) {
            throw new RuntimeException("user login SFTP server occur exception:" + e);
        }
    }

    /**
     * 退出登陆
     *
     * @param sftp sftp对象
     * @param session session对象
     */
    public void loginOut(ChannelSftp sftp, Session session){
        try {
            if(null != sftp && sftp.isConnected()){
                sftp.disconnect();
            }
            if (null != session && session.isConnected()){
                session.disconnect();
            }
        } catch (Exception e) {
            logger.warn("用户退出SFTP服务器出现异常:" + e);
        }
    }

    /**
     * 下载文件
     *
     * @param downloadFilePath 要下载的文件所在绝对路径
     * @param downloadFileName 要下载的文件名(sftp服务器上的文件名)
     * @param saveFile 文件存放位置(文件所在绝对路径)
     * @param authTypeMode 用户认证方式
     */
    public void download(String downloadFilePath, String downloadFileName, File saveFile, AuthTypeMode authTypeMode) throws Exception{
        Assert.notNull(downloadFilePath,"download file absolute path is not null");
        Assert.notNull(downloadFileName,"download file is not null");
        Assert.notNull(saveFile,"save file location is not null");
        Assert.notNull(authTypeMode,"auth type way is not null");

        OutputStream outputStream = null;
        ChannelSftp sftp = null;
        Session session = null;
        try {
            Map<String,Object> loginInfo = loginIn(authTypeMode);
            sftp = (ChannelSftp) loginInfo.get("sftp");
            session = (Session) loginInfo.get("session");

            logger.info("待下载文件地址为:" + downloadFilePath + ",文件名为:" + downloadFileName + ",认证方式:" + authTypeMode.getAuthValue());
            sftp.cd(downloadFilePath);
            sftp.ls(downloadFileName);
            outputStream = new FileOutputStream(saveFile);
            sftp.get(downloadFileName,outputStream);
            logger.info("文件下载完成!");

        } finally {
            if (null != outputStream){
                outputStream.close();
            }
            loginOut(sftp,session);
        }
    }

    /**
     * 上传文件
     *
     * @param uploadPath 上传SFTP完整路径
     * @param uploadFile 上传文件(完整路径)
     * @param authTypeMode 认证方式
     */
    public void upload(String uploadPath, String uploadFile, AuthTypeMode authTypeMode) throws Exception{
        Assert.notNull(uploadPath,"upload path is not null");
        Assert.notNull(uploadFile,"upload file is not null");
        Assert.notNull(authTypeMode,"auth type way is not null");

        InputStream inputStream = null;
        ChannelSftp sftp = null;
        Session session = null;
        try {
            Map<String,Object> loginInfo = loginIn(authTypeMode);
            sftp = (ChannelSftp) loginInfo.get("sftp");
            session = (Session) loginInfo.get("session");

            logger.info("待上传文件为:" + uploadFile + ",上传SFTP服务器路径:" + uploadPath + ",认证方式:" + authTypeMode.getAuthValue());
            File file = new File(uploadFile);
            inputStream = new FileInputStream(file);
            try {
                sftp.cd(uploadPath);
            } catch (SftpException e) {
                logger.error("SFTP器服务存放文件路径不存在");
                throw new RuntimeException("upload path is not exist");
            }
            sftp.put(inputStream,file.getName());
            logger.info("上传文件成功!");
        } finally {
            if (null != inputStream){
                inputStream.close();
            }
            loginOut(sftp,session);
        }

    }

    /**
     * authType = PASSWORD,authValue = password
     * authType = rsa,authValue = rsa文件路径
     */
    class AuthTypeMode{
        private String authType;

        private String authValue;

        AuthTypeMode(String authType, String authValue){
            this.authType = authType;
            this.authValue = authValue;
        }

        String getAuthType(){
            return authType;
        }

        String getAuthValue(){
            return authValue;
        }
    }

    /**
     * 在slf4j日志框架里打印JSch日志
     */
    class SettleJschLogPrint implements com.jcraft.jsch.Logger{

        @Override
        public boolean isEnabled(int i) {
            return true;
        }

        @Override
        public void log(int i, String s) {
            logger.info(s);
        }
    }

    enum AuthTypeEnum {

        PASSWORD("PASSWORD","密码认证"),

        RSA("RSA","rsa密钥认证");

        private String code;

        private String desc;

        AuthTypeEnum(String code, String desc){
            this.code = code;
            this.desc = desc;
        }

        public String getCode(){
            return this.code;
        }
    }

    public static void main(String[] args) throws Exception{
        //密码认证方式
        SftpTool sftpTool = new SftpTool("192.168.79.151","albert",22);
        //下载文件
        File saveFile = new File("/data/sftp/verifyfile_01.txt");
        sftpTool.download("/verifyfile","verifyfile_01.csv",saveFile,sftpTool.new AuthTypeMode(AuthTypeEnum.PASSWORD.getCode(),"alan123456"));
        //上传文件
        sftpTool.upload("/verifyfile","/data/sftp/verifyfile_01.txt",sftpTool.new AuthTypeMode(AuthTypeEnum.PASSWORD.getCode(),"alan123456"));

        //密钥认证方式下载文件
        SftpTool sftpToolTwo = new SftpTool("192.168.79.151","qingniu",22);
        File saveFileTwo = new File("/data/sftp/verifyfile_01.txt");
        sftpToolTwo.download("/verifyfile","verifyfile_01.csv",saveFileTwo,sftpToolTwo.new AuthTypeMode(AuthTypeEnum.RSA.getCode(),"/data/rsa/id_rsa_qingniu"));
        //密钥认证方式上传文件( 上传会失败Permission denied,因为qingniu这个用户没有写的权限 )
        sftpToolTwo.upload("/verifyfile","/data/sftp/verifyfile_01.txt",sftpToolTwo.new AuthTypeMode(AuthTypeEnum.RSA.getCode(),"/data/rsa/id_rsa_qingniu"));
    }
}

 

Java实现SFTP传输 (安全外壳)的安全的文件传输协议,使用SFTP协议可以在文件传输过程中提供一种安全的网络的加密算法,从而保证数据的安全传输。SFTP在Linux操作系统中,默认的端口是22,传输提供了密码和密钥验证机制,可以有效防止传输过程的威胁和公技。SFTP(SSH File Transfer Protocol)是一种。:使用账户ID和密码进行验证,凭据验证过程中是加密的。:需要满足两种验证,才可以进行连接。:通过SSH密码进行验证。账户密码+SSH密钥。 阅读详情

相关推荐

WinSCP可视化工具在公网环境下如何进行文件编辑与SSH传输

WinSCP可视化工具在公网环境下如何进行文件编辑与SSH传输

旋律 | 话语 | 色彩 | 情景 1631

Java 实现 SFTP 操作

创建 SFTP 用户

yts2103的博客 2948

手把手教你优化SFTP连接:从JSch异常到性能调优实战

本文深入探讨了SFTP连接优化的全流程,从JSch异常诊断到性能调优实战。通过分析`com.jcraft.jsch.JSchException: channel is not opened`等常见错误,提供SSH服务端配置优化、JSch客户端调优及分布式架构设计等解决方案,助力提升文件传输服务的稳定性和性能。

u0v1w2x3的博客 676

Java使用sftp文件服务器

使用stfp是一种简单有效的方式,可以对文件进行上传和下载。下面是使用sftp文件服务器的demo,可以作为工具类放入项目中,即可简单上手和使用。

Ditto的分享 4850

一文教你学会Termux+SFTP+远程文件传输

要注意的是,以上步骤使用的是cpolar的随机临时tcp端口地址,所生成的公网地址为随机临时地址,该公网地址24小时内会随机变化。我们打开任意SFTP 客户端工具,选择SFTP,输入我们在cpolar中创建的公网地址和对应的端口,再输入用户名密码,即可访问成功(本文章以winSCP为例,其他客户端同理)配置固定tcp地址,回到在手机浏览器上cpolar web ui管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到我们上面创建的tcp隧道,点击右侧的。重启完termux后,然后启动cpolar。

知道的越多,不知道的越多。 2003

Java SFTP客户端实现源码.zip

在数字化时代,数据安全是每个企业都必须重视的关键问题。通过深入探讨SFTP协议的细节,本章节旨在提供对协议本身和其安全特征的全面理解。SFTP,即安全文件传输协议,是一种在SSH协议上构建的安全文件传输服务。它由SSH2协议标准的一部分发展而来,最初是为了解决旧版FTP协议在安全和可靠性方面的不足。SFTP提供了一个安全的加密通道,用以保护数据在互联网中传输时的隐私性和完整性。JSch是一个纯Java实现的库,它允许用户通过SSH连接到SFTP服务器进行文件传输。

weixin_36303807的博客 955

java通过sftp上传文件

Linux操作系统我们经常使用ssh中的ftp,sftp连接服务器,做相应操作。 如何通过java代码的形式采用sftp连接到服务器,进行文件上传下载等操作呢? 第一步 引入依赖包 基于maven构建工程,pom.xml加入依赖。 &lt;!-- sftp上传依赖包 --&gt; &lt;dependency&gt;       &lt;groupId&gt;com.jcraft&lt;/...

weixin_41167961的博客 5950

Java实现SFTP客户端与服务端开发实战详解

SFTP(Secure File Transfer Protocol)是一种基于SSH(Secure Shell)协议的安全文件传输协议,通过单一加密通道实现身份验证、命令控制与数据传输,有效抵御中间人攻击和窃听风险。与传统FTP明文传输不同,SFTP依赖SSH提供的强加密机制,确保会话的机密性、完整性和不可否认性。在现代Java企业级应用中,安全文件传输是数据集成与系统间通信的关键环节。

weixin_35754676的博客 1291

SFTP和秘钥连接传输

简述 SFTP可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,是一种传输档案至服务器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的...

姚明锋的博客 9363

OV5640调试大坑,关于binning、RES分辨率与EV曝光

OV5640在使用binning模式时,必须考虑使用场景,分辨率下降叠加动态范围压缩,会使目标对象细节在高光环境下大量丢失,2x2的binning模式,分辨率会远低于感光面积的1/4。

chongyun_的专栏 1828

避坑指南:Zabbix poller进程100%占用的5种常见原因及解决方案

本文深入剖析了Zabbix poller进程占用率高达100%的五大常见原因,包括监控项与进程数不匹配、不可达主机资源浪费、数据库性能瓶颈、监控项配置不合理以及版本缺陷。文章提供了从系统化诊断到针对性解决方案的完整指南,并重点介绍了如何通过优化zabbix_server.conf中的StartPollers等关键参数进行有效调优,帮助运维人员从根本上解决这一经典性能问题。

7z8x2c4v6b9的博客 251

sftp上传:密码认证和密钥认证两种方式

import com.jcraft.jsch.*; import lombok.extern.slf4j.Slf4j; import java.io.*; import java.util.Properties; @Slf4j public class SftpUtil { private String userName; // FTP 登录用户名 private Stri...

Emine 1万+

电机转矩、功率与转速:核心关系、公式推导与工程应用指南

在电气传动与自动化控制领域,理解旋转机械的核心物理量是进行设备选型、系统设计和故障诊断的基础。转矩、功率和转速构成了描述电机性能的“铁三角”,它们之间通过经典的物理公式紧密关联。从原理上讲,功率是单位时间内做功的能力,转矩是产生旋转运动的力矩,而转速则决定了运动快慢。这三者的关系(P = T × n / 9550)不仅是理论核心,更是工程实践中的关键计算工具,直接关系到电机的驱动能力、能耗与系统匹配。其技术价值在于,它为从微型伺服电机到大型工业传动系统的设计提供了统一的量化分析框架。在应用场景上,无论是为输

weixin_29184371的博客 258

SFTP 上传文件的两种验证方式 - 密码和秘钥

作为SFTP客户端, 如果使用秘钥的方式, 需要客户端产生公钥, 将公钥给服务端, 服务端配置在服务上. 如果是使用密码认证, 则服务端需要提供给客户用户名和密码. 密码的认证方式, java上传文件代码为: private static void uploadSFTPFile(@NonNull String fileName) throws Throwable { Connection sshConnection = new Connection("ipaddress", 2..

aqudgv83的博客 3223

数据中心机房建设标准及依据

深刻理解、尊重并恪守这些依据,是我们以科学、经济、可靠的方式,为蓬勃发展的数字经济筑牢基石的唯一路径。让我们共同努力,以标准为依据,以匠心为精神,建造更多世界一流的高效能、高可用、高智能的绿色数据中心,共同赋能数字中国的宏伟事业,支撑中华民族在数字时代的伟大复兴征程中稳步前行!今天我将力图以宏大的视角和深入的剖析,系统性地阐述数据中心机房建设所应遵循的多层次、多维度的标准依据,揭示这些依据背后的深层逻辑与时代使命,并探讨其如何共同作用于一座世界级数据中心的诞生。,以支持万兆乃至更高速率的传输。

qq_39980997的博客 1139

5090D显卡安装LLaMA-Factory避坑指南:PyTorch与CUDA版本兼容性问题解决

本文是针对5090D显卡安装LLaMA-Factory时遇到的PyTorch与CUDA版本兼容性问题的详细解决指南。文章深入剖析了因GPU架构代际差异导致的“no kernel image”报错根源,并提供了从环境诊断、安装匹配的PyTorch Nightly版本,到最终集成验证的完整路径,帮助用户确保LLaMA-Factory在5090D上稳定运行。

Apple的专栏 869

FreeSSHd搭建SFTP服务器踩坑实录:从‘key verification failed’到Java代码成功上传

本文详细介绍了在Windows 10系统上使用FreeSSHd搭建SFTP服务器的完整流程,包括环境准备、基础配置、常见连接问题排查(如‘key verification failed’)以及Java代码实现文件上传的实战指南。通过清晰的步骤说明和代码示例,帮助开发者快速解决SFTP服务器搭建中的典型问题,并实现安全高效的文件传输服务。

weixin_28707365的博客 265

《干货满满!AI 应用架构师打造 AI 驱动生产计划的实战技巧》

生产计划是制造企业的“大脑”——它决定了买什么物料、产多少产品、用什么设备、什么时候交货,直接影响企业的成本、效率和客户满意度。需求预测靠经验,误差常超20%;排产依赖Excel,调整一次要3天;供应链协同靠邮件,物料延迟导致停产屡见不鲜。作为AI应用架构师,我们的任务是用AI重新“激活”这个“大脑”——用数据驱动的预测替代经验判断,用智能优化替代人工排产,用实时协同替代被动响应。本文结合3个制造业实战案例5段可运行代码2个数字孪生模型,从架构设计→核心模块实现→落地踩坑。

移动开发前沿的博客 1085

java sftp私钥登录_cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式

cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式二、非密钥登录0、Bitvise SSH Server服务器1、Win + R 进入cmd窗口。2、登录命令:sftp -P 28 kevin@127.0.0.1说明:-P 端口参数 28是端口,默认端口是22 kevin是登录的用户名,127.0.0.1是SFTP服务器的地址(搭在本地环境)上传文件命令:put d:/file...

weixin_42126668的博客 2177

【智能模型系列】基于Unity和MediaPipe【手部追踪+手势识别】系统开发指南

在本文中,我将详细介绍一个基于MediaPipe的Unity手势识别系统,该系统能够识别多种常见手势(如拳头、点赞、胜利手势等),并提供完整的事件系统来处理手势状态变化。这个系统非常适合用于VR/AR交互、手势控制游戏或任何需要自然用户界面的应用场景。

纯技术流日常开发商业开发记录总结等 586

R语言广义加型模型(GAM)的运用例子及实现教程

一旦拟合了广义加型模型,我们可以查看模型摘要和诊断,以评估模型的质量和拟合情况。# 查看模型摘要响应变量:mpg(汽车的燃油效率)拟合函数:mpg ~ s(hp) + s(wt)

Mrrunsen的博客 3446

java获得sftp目录_Java代码获取SFTP服务器文件

1 /**2 *@authorshansm3 * @date 2020/3/18 -17:274 */5 public classSFTPUtil {67 private transient Logger log = LoggerFactory.getLogger(this.getClass());89 privateChannelSftp sftp;1011 priva...

weixin_35719260的博客 1952

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java 项目如何连接并使用 SFTP 服务的示例详解

本文介绍了什么是 SFTP 服务器,并写了一个 Java 示例解释了如何连接 SFTP 服务器,含有一些常见问题的解释,例如客户端没有支持ssh-rsa协议怎么做,并写了一些使用 SFTP 的常用方法。

青灯文案的博客 2791

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java利用JCSH 实现 sftp 传送文件代码

JSch (Java Secure Channel) 是一个纯 Java 实现的 SSH2 库,允许 Java 程序通过 SSH 协议安全地连接远程服务器,支持:SFTP(安全文件传输)SCP(安全文件复制)端口转发(SSH 隧道)Shell 命令执行(远程命令调用)它是 com.jcraft 提供的开源库,广泛用于 Java 应用中的 SSH 相关功能。

sun0322 1452

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

下一篇: java并发包线程同步 - CountDownLatch与CyclicBarrier比较学习
一只青牛
博客等级 码龄10年 3粉丝 13原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值