Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载

Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载,第1张

package jsch;

import javaioFile;

import javaioFileInputStream;

import javautilProperties;

import comjcraftjschChannel;

import comjcraftjschChannelSftp;

import comjcraftjschJSch;

import comjcraftjschJSchException;

import comjcraftjschSession;

public class Test {

    protected String host;//sftp服务器ip

    protected String username;//用户名

    protected String password;//密码

    protected String privateKey;//密钥文件路径

    protected String passphrase;//密钥口令

    protected int port = 22;//默认的sftp端口号是22

    /

      获取连接

      @return channel

     /

    public ChannelSftp connectSFTP() {

        JSch jsch = new JSch();

        Channel channel = null;

        try {

            if (privateKey != null && !""equals(privateKey)) {

                //使用密钥验证方式,密钥可以使有口令的密钥,也可以是没有口令的密钥

                if (passphrase != null && ""equals(passphrase)) {

                    jschaddIdentity(privateKey, passphrase);

                } else {

                    jschaddIdentity(privateKey);

                }

            }

            Session session = jschgetSession(username, host, port);

            if (password != null && !""equals(password)) {

                sessionsetPassword(password);

            }

            Properties sshConfig = new Properties();

            sshConfigput("StrictHostKeyChecking", "no");// do not verify host key

            sessionsetConfig(sshConfig);

            // sessionsetTimeout(timeout);

            sessionsetServerAliveInterval(92000);

            sessionconnect();

            //参数sftp指明要打开的连接是sftp连接

            channel = sessionopenChannel("sftp");

            channelconnect();

        } catch (JSchException e) {

            eprintStackTrace();

        }

        return (ChannelSftp) channel;

    }

    

    /

      上传文件

      

      @param directory

                 上传的目录

      @param uploadFile

                 要上传的文件

      @param sftp

     /

    public void upload(String directory, String uploadFile, ChannelSftp sftp) {

        try {

            sftpcd(directory);

            File file = new File(uploadFile);

            sftpput(new FileInputStream(file), filegetName());

        } catch (Exception e) {

            eprintStackTrace();

        }

    }

    /

      下载文件

      

      @param directory

                 下载目录

      @param downloadFile

                 下载的文件

      @param saveFile

                 存在本地的路径

      @param sftp

     /

    public void download(String directory, String downloadFile,

            String saveFile, ChannelSftp sftp) {

        try {

            sftpcd(directory);

            sftpget(downloadFile,saveFile);

        } catch (Exception e) {

            eprintStackTrace();

        }

    }

    /

      删除文件

      

      @param directory

                 要删除文件所在目录

      @param deleteFile

                 要删除的文件

      @param sftp

     /

    public void delete(String directory, String deleteFile, ChannelSftp sftp) {

        try {

            sftpcd(directory);

            sftprm(deleteFile);

        } catch (Exception e) {

            eprintStackTrace();

        }

    }

    

    public void disconnected(ChannelSftp sftp){

        if (sftp != null) {

            try {

                sftpgetSession()disconnect();

            } catch (JSchException e) {

                eprintStackTrace();

            }

            sftpdisconnect();

        }

    }

}

使用sftp功能需要在ssh的配置文件/etc/ssh/sshd_config中添加如下配置文本,以SLES 103为例:

Subsystem sftp /usr/lib64/ssh/sftp-server

然后service ssh restart重启ssh就OK了

以下是简单的命令:

01 sftp username@host ip

02 #登陆sftp服务器

03 ls

04 #列出远程服务器上当前目录下的文件

05 cd dir

06 #进入远程服务器上面的dir目录

07 lcd dir

08 #进入本地dir目录

09 quit

10 #退出sftp

11 get file

12 #从服务器上面下载文件到本地当前目录

13 put file

14 #将本地当前目录下的某个文件上传到服务器上

15 mget file1 file2

16 #下载多个文件

17 mput file1 file2

18 #上传多个文件

19 #使用!开始代表shell,例如!ls即可以列出本地当 前目录的文件

windows中可以使用Core FTP,FileZilla, WinSCP,Xftp来连接SFTP进行上传,下载文件,建立,删除目录等操作。

以winscp软件为例:

1、将之前下载的sftp服务端解压缩,然后直接运行主程序。点“NEXT”按钮进行下面的操作。

2、在许可协议窗口处填写“同意”并点“下一步”按钮继续。

3、在接下来的配置窗口中选择要安装的组件,从界面中可以看到包括client(客户端)与server(服务器端),实际上只需要服务器端,而客户端使用之前下载的WinSCP 382即可。选择相应的服务器端组件后点“下一步”完成安装

4、 接下来就要启动该服务了,通过“开始->运行->输入CMD后回车”进入到命令提示窗口,然后通过cd命令定位到c:\programfiles\openssh\bin目录。

5、依次执行mkgroup -l >> \etc\group mkpasswd -l >> \etc\passwd命令,这样你目前windows本地帐户中的用户就都可以登录该sftp服务器了,自对文件目录的访问权限和NTFS权限一致。此步骤相当于FTP中的建立访问帐号。

6、添加完各个访问帐户后就可以使用了。

SFTP:sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。

sftp是ssh内含的协议,只要sshd服务器启动了,它就可用,它本身不需要ftp服务器启动。 FTP服务器和客户端要进行文件传输,就需要通过端口来进行。FTP协议需要的端口一般包括两种:

控制链路--------TCP端口21

所有你发往FTP服务器的命令和服务器反馈的指令都是通过服务器上的21端口传送的。

数据链路--------TCP端口20

数据链路主要是用来传送数据的,比如客户端上传、下载内容,以及列目录显示的内容等。 FTP服务器和客户端要进行文件传输,就需要通过端口来进行。FTP协议需要的端口一般包括两种:

控制链路--------TCP端口21

所有你发往FTP服务器的命令和服务器反馈的指令都是通过服务器上的21端口传送的。

数据链路--------TCP端口20

数据链路主要是用来传送数据的,比如客户端上传、下载内容,以及列目录显示的内容等。 FTP服务器和客户端要进行文件传输,就需要通过端口来进行。FTP协议需要的端口一般包括两种:

控制链路--------TCP端口21

所有你发往FTP服务器的命令和服务器反馈的指令都是通过服务器上的21端口传送的。

数据链路--------TCP端口20

数据链路主要是用来传送数据的,比如客户端上传、下载内容,以及列目录显示的内容等。 FTP连接的两种方式

在数据链路的建立上,FTP Server 为了适应不同的网络环境,支持两种连接模式:主动模式(Port)和被动模式(Pasv)。其实这两种连接模式主要是针对数据链路进行的,和控制链路无关。

主动模式

主动模式是这样工作的:客户端把自己的高位端口和服务器端口21建立控制链路。所有的控制命令比如Is或get都是通过这条链路传送的。

当客户端需要服务器端给它传送数据时,客户端会发消息给服务器端,告诉自己的位置和打开的高位端口(一般大于1024的端口都就叫高位端口),等候服务器 的20端口和客户端打开的端口进行连接,从而进行数据的传输。当服务器端收到信息后,就会和客户端打开的端口连接,这样数据链路就建立起来了。

采用主动模式连接服务器的客户端,当它位于NAT或者防火墙的保护之后时会碰到连接失败的问题。这是因为当防火墙接到服务器发送过来的信息的时候,并不知道应该发送给内部网络中的哪一台客户端造成的。

被动模式

被动模式是这样工作的:当客户端发送数据请求后,服务器也会发信息给客户端,告诉客户端:服务器在本地打开了一个高位端口P,你现在来连接我吧。当客户端收到该信息时,就会去连接服务器端的端口P,连接成功后,数据链路就建立了。

从上面的解释中我们可以看到,两种模式主要的不同是数据连接建立的不同。对于Port模式,是客户端在本地打开一个端口等服务器去连接建立数据连接,而Pasv模式就是服务器打开一个端口等待客户端去建立一个数据连接。

第一步:打开WinSCP,选择高级

第二步:选择验证,选择密钥文件

第三步:选中你的密钥文件点击确定

第四步:记得点击保存按钮,下次可以直接登录

Mac系统是原生集成了 ftp服务器, 只要简简单单的几步设置就能把你的mac变成ftp服务器, 这样方便了我们跨平台共享文件

在Macbook上做如下设置:

[blockquote]

打开System Preferences > Share 对话框,在左侧列表中的“File Sharing”之前打勾;[/li]

[/li]点击该对话框中的“Options”按钮;[/li]

[/li]在随后出线的对话框中的“Share files and folders using FTP”之前打勾;[/li]

[/li]点击“Done”按钮完成设置[/li]

[/blockquote]在Windows机器上打开资源管理器或者浏览器,在地址栏输入:

[blockquote]ftp://macbook用户名:macbook密码@macbook IP地址

[/blockquote][blockquote]例如: ftp://pearmac:123456@19216801

[/blockquote]如此即可通过FTP方式访问Macbook上的所有文件

如果你的JAVA部署的tomcat,就是你要查找文件的服务器,那就用:

File file = new File("文件路径")。

如果你本地的JAVA想要访问远程的一个服务器的文件是否存在,就得用如下方法:

URL url = new URL(“文件路径:可以是本地服务器的路径,也可以是远程服务器的路径”)

HttpURLConnection urlcon = (HttpURLConnection) urlopenConnection();

//message = urlcongetHeaderField(0);

//文件存在‘HTTP/11 200 OK’ 文件不存在 ‘HTTP/11 404 Not Found’

Long TotalSize=LongparseLong(urlcongetHeaderField("Content-Length"));  

if (TotalSize>0){

return true;

}else{

return false;

}

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情