如何使用 SFTP 安全地两台电脑如何传输文件件

4763人阅读
知识点(74)
运维(85)
SFTP是基于SSH的文件传输协议,与ZMODEM相比具有更加安全且更为快速的文件传输功能。
如何利用SFTP接收文件:
1.&&&&在本地提示以sftp命令登陆拟要接收文件的主机。
Xshell:\& sftp hostname
2.&&&&在sftp提示下以get命令接收需要的文件。
sftp:/home/user21&get filename
如何利用SFTP发送文件:
1.&&&&在本地提示下以sftp命令登陆拟要发送文件的主机。
Xshell:\& sftp hostname
2.&&&&在sftp提示下以put命令发送需要的文件。
sftp:/home/user21&put filename
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:111113次
积分:2190
积分:2190
排名:第17246名
原创:110篇
转载:44篇
(4)(9)(5)(9)(6)(3)(2)(7)(1)(14)(3)(5)(11)(1)(4)(4)(1)(1)(1)(4)(2)(5)(4)(4)(2)(1)(1)(3)(1)(1)(4)(3)(6)(1)(1)(1)(3)(7)(1)(2)(1)(2)(7)博客访问: 31092
博文数量: 11
博客积分: 2530
博客等级: 少校
技术积分: 130
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
Sftpscp sftpftp FTPftpdwu-ftpd log80%ftpd sftpwu-ftpd scprcp Sftpscpsshdsftpscp/etc/ssh2/sshd2_config subsystem-sftp sftp-server sshd. sftpscpsshd Sftp Sftpssh2 sftpftp 1Passwordsniffer 2 sftp2mynamesftphost1
sftp myname@host1 sftp manul sftp2 sftp&sftp ·quit:
·cd directory:
·lcd directory:
·ls [ -R ] [ -l ] [ file ... ]: -R -l .-R-l ·lls [ -R ] [ -l ] [ file ... ]: ls ·get [file ...]:
·put [ file ... ]:
·mkdir dir (rmdir dir):
ls,lls,getputsshregex sftp2-3Snifferftp4password. sftp Scp Scp2ssh2ssh2 mmynamelocal_dirfilename host1remote_dirscp scp local_dir/filename myname@host1:remote_dir filenamesshregex scp local_dir/* myname@host1:remote_dir local_dirhost1remote_dir scp myname@host1:remote_dir/filename . filenamehost1remote_dir scp scp myname@host1:remote_dir/filename myname@host2:another_dir scpsftp
阅读(1299) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。&现在的网络很让人不放心,所以以前用telnet的都改用ssh了。如果你以前用ftp,那么也要换sftp了。sftp这个工具和ftp用法一样。但是通过ssl加密了的。一个示例如下:sftp& test@172.16.100.232Connecting to 172.16.100.232...test@172.16.100.232's password: sftp& lsDesktop& vmware&& sftp& helpAvailable commands:cd path&&&&&&&&&&&&&&&&&&&&&& Change remote directory to 'path'lcd path&& &&&&&&&&&&&&&&&&&&&Change local directory to 'path'chgrp grp path&&&&&&&&&&&&&&& Change group of file 'path' to 'grp'chmod mode path&&&&&&&&&&&&&& Change permissions of file 'path' to 'mode'chown own path&&&&&&&&&&&&&&& Change owner of file 'path' to 'own'help&&&&&&&&&&&&&&&&&&&&&&&&& Display this help textget remote-path [local-path]& Download filells [ls-options [path]]&&&&&& Display local directory listingln oldpath newpath&&&&&&&&&&& Symlink remote filelmkdir path&&&&&&&&&&&&&&&&&& Create local directorylpwd&&&&&&&&&&&&&&&&&&&&&&&&& Print local working directoryls [path]&&&&&&&&&&&&&&&&&&&& Display remote directory listinglumask umask&&&&&&&&&&&&&&&&& Set local umask to 'umask'mkdir path&&&&&&&&&&&&&&&&&&& Create remote directoryprogress&&& &&&&&&&&&&&&&&&&&&Toggle display of progress meterput local-path [remote-path]& Upload filepwd&&&&&&&&&&&&&&&&&&&&&&&&&& Display remote working directoryexit&&&&&&&&&&&&&&&&&&&&&&&&& Quit sftpquit&&&&&&&&&&&&&&&&&&&&&&&&& Quit sftprename oldpath newpath&&&&&&& Rename remote filermdir path&&&&&&&&&&&&&&&&&&& Remove remote directoryrm path&&&&&&&&&&&&&&&&&&&&&& Delete remote filesymlink oldpath newpath&&&&&& Symlink remote fileversion&&&&&&&&&&&&&&&&&&&&&& Show SFTP version!command&&&&&&&&&&&&&&&&& &&&&Execute 'command' in local shell!&&&&&&&&&&&&&&&&&&&&&&&&&&&& Escape to local shell?&&&&&&&&&&&&&&&&&&&&&&&&&&&& Synonym for helpsftp& quit看起来这个sftp比ftp命令要功能强一些,有文件属性相关的命令,比如:chown,chmod,chgrp此命令由openssh-client软件包提供,openssh-client还提供下列命令:/usr/bin/ssh/usr/bin/scp/usr/bin/ssh-add/usr/bin/ssh-agent/usr/bin/ssh-keygen/usr/bin/ssh-keyscan/usr/bin/sftp/usr/bin/ssh-copy-id/usr/bin/ssh-argv0/usr/bin/slogin
平凡的水果世界,平凡中的不平凡。 今朝看水果是水果 ,看水果还是水果 ,看水果已不是水果。这境界,谁人可比?在不平凡的水果世界里,仁者见仁,智者见智。
正月是农历新年的开始,人们往往将它看作是新的一年年运好坏的兆示期。所以,过年的时候“禁忌”特别多。当然,各个地方的风俗习惯不一样,过年的禁忌也是不一样的。
庞凤山情感处方
TIM生命過客
请注意使用文明用语
画报点击数0
文章点击数0JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。
本文只介绍如何使用JSch实现的SFTP功能。
SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式。SFTP是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。(来自百度的解释)
要使用JSch,需要下载它的jar包,请从官网下载它:
ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的方法,如:
进入指定目录
得到指定目录下的文件列表
rename():
重命名指定文件或目录
删除指定文件
等等(这里省略了方法的参数,put和get都有多个重载方法,具体请看源代码,这里不一一列出。)
JSch支持三种文件传输模式:
完全覆盖模式,这是JSch的默认文件传输模式,即如果目标文件已经存在,传输的文件将完全覆盖目标文件,产生新的文件。
恢复模式,如果文件已经传输一部分,这时由于网络或其他任何原因导致文件传输中断,如果下一次传输相同的文件,
则会从上一次中断的地方续传。
追加模式,如果目标文件已存在,传输的文件将在目标文件后追加。
创建ChannelSftp对象
编写一个工具类,根据ip,用户名及密码得到一个SFTP channel对象,即ChannelSftp的实例对象,在应用程序中就可以使用该对象来调用SFTP的各种操作方法。
SFTPChannel.java
SFTPChannel.java
package com.longyg.
import java.util.M
import java.util.P
import org.apache.log4j.L
import com.jcraft.jsch.C
import com.jcraft.jsch.ChannelS
import com.jcraft.jsch.JS
import com.jcraft.jsch.JSchE
import com.jcraft.jsch.S
public class SFTPChannel {
Session session =
Channel channel =
private static final Logger LOG = Logger.getLogger(SFTPChannel.class.getName());
public ChannelSftp getChannel(Map&String, String& sftpDetails, int timeout) throws JSchException {
String ftpHost = sftpDetails.get(SFTPConstants.SFTP_REQ_HOST);
String port = sftpDetails.get(SFTPConstants.SFTP_REQ_PORT);
String ftpUserName = sftpDetails.get(SFTPConstants.SFTP_REQ_USERNAME);
String ftpPassword = sftpDetails.get(SFTPConstants.SFTP_REQ_PASSWORD);
int ftpPort = SFTPConstants.SFTP_DEFAULT_PORT;
if (port != null && !port.equals(&&)) {
ftpPort = Integer.valueOf(port);
JSch jsch = new JSch(); // 创建JSch对象
session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 根据用户名,主机ip,端口获取一个Session对象
LOG.debug(&Session created.&);
if (ftpPassword != null) {
session.setPassword(ftpPassword); // 设置密码
Properties config = new Properties();
config.put(&StrictHostKeyChecking&, &no&);
session.setConfig(config); // 为Session对象设置properties
session.setTimeout(timeout); // 设置timeout时间
session.connect(); // 通过Session建立链接
LOG.debug(&Session connected.&);
LOG.debug(&Opening Channel.&);
channel = session.openChannel(&sftp&); // 打开SFTP通道
channel.connect(); // 建立SFTP通道的连接
LOG.debug(&Connected successfully to ftpHost = & + ftpHost + &,as ftpUserName = & + ftpUserName
+ &, returning: & + channel);
return (ChannelSftp)
public void closeChannel() throws Exception {
if (channel != null) {
channel.disconnect();
if (session != null) {
session.disconnect();
SFTPConstants是一个静态成员变量类:
SFTPConstans.java
package com.longyg.
public class SFTPConstants {
public static final String SFTP_REQ_HOST = &host&;
public static final String SFTP_REQ_PORT = &port&;
public static final String SFTP_REQ_USERNAME = &username&;
public static final String SFTP_REQ_PASSWORD = &password&;
public static final int SFTP_DEFAULT_PORT = 22;
public static final String SFTP_REQ_LOC = &location&;
实现文件上传可以调用ChannelSftp对象的put方法。ChannelSftp中有12个put方法的重载方法:
public void put(String src, String dst)
将本地文件名为src的文件上传到目标服务器,目标文件名为dst,若dst为目录,则目标文件名将与src文件名相同。
采用默认的传输模式:OVERWRITE
public void put(String src, String dst, int mode)
将本地文件名为src的文件上传到目标服务器,目标文件名为dst,若dst为目录,则目标文件名将与src文件名相同。
指定文件传输模式为mode(mode可选值为:ChannelSftp.OVERWRITE,ChannelSftp.RESUME,
ChannelSftp.APPEND)
public void put(String src, String dst, SftpProgressMonitor monitor)
将本地文件名为src的文件上传到目标服务器,目标文件名为dst,若dst为目录,则目标文件名将与src文件名相同。
采用默认的传输模式:OVERWRITE
并使用实现了SftpProgressMonitor接口的monitor对象来监控文件传输的进度。
public void put(String src, String dst,
SftpProgressMonitor monitor, int mode)
将本地文件名为src的文件上传到目标服务器,目标文件名为dst,若dst为目录,则目标文件名将与src文件名相同。
指定传输模式为mode
并使用实现了SftpProgressMonitor接口的monitor对象来监控文件传输的进度。
public void put(InputStream src, String dst)
将本地的input stream对象src上传到目标服务器,目标文件名为dst,dst不能为目录。
采用默认的传输模式:OVERWRITE
public void put(InputStream src, String dst, int mode)
将本地的input stream对象src上传到目标服务器,目标文件名为dst,dst不能为目录。
指定文件传输模式为mode
public void put(InputStream src, String dst, SftpProgressMonitor monitor)
将本地的input stream对象src上传到目标服务器,目标文件名为dst,dst不能为目录。
采用默认的传输模式:OVERWRITE
并使用实现了SftpProgressMonitor接口的monitor对象来监控传输的进度。
public void put(InputStream src, String dst,
SftpProgressMonitor monitor, int mode)
将本地的input stream对象src上传到目标服务器,目标文件名为dst,dst不能为目录。
指定文件传输模式为mode
并使用实现了SftpProgressMonitor接口的monitor对象来监控传输的进度。
public OutputStream put(String dst)
该方法返回一个输出流,可以向该输出流中写入数据,最终将数据传输到目标服务器,目标文件名为dst,dst不能为目录。
采用默认的传输模式:OVERWRITE
public OutputStream put(String dst, final int mode)
该方法返回一个输出流,可以向该输出流中写入数据,最终将数据传输到目标服务器,目标文件名为dst,dst不能为目录。
指定文件传输模式为mode
public OutputStream put(String dst, final SftpProgressMonitor monitor, final int mode)
该方法返回一个输出流,可以向该输出流中写入数据,最终将数据传输到目标服务器,目标文件名为dst,dst不能为目录。
指定文件传输模式为mode
并使用实现了SftpProgressMonitor接口的monitor对象来监控传输的进度。
public OutputStream put(String dst, final SftpProgressMonitor monitor, final int mode, long offset)
该方法返回一个输出流,可以向该输出流中写入数据,最终将数据传输到目标服务器,目标文件名为dst,dst不能为目录。
指定文件传输模式为mode
并使用实现了SftpProgressMonitor接口的monitor对象来监控传输的进度。
offset指定了一个偏移量,从输出流偏移offset开始写入数据。
应用实例:
SFTPTest.java
package com.longyg.
import java.util.HashM
import java.util.M
import com.jcraft.jsch.ChannelS
public class SFTPTest {
public SFTPChannel getSFTPChannel() {
return new SFTPChannel();
* @param args
* @throws Exception
public static void main(String[] args) throws Exception {
SFTPTest test = new SFTPTest();
Map&String, String& sftpDetails = new HashMap&String, String&();
// 设置主机ip,端口,用户名,密码
sftpDetails.put(SFTPConstants.SFTP_REQ_HOST, &10.9.167.55&);
sftpDetails.put(SFTPConstants.SFTP_REQ_USERNAME, &root&);
sftpDetails.put(SFTPConstants.SFTP_REQ_PASSWORD, &arthur&);
sftpDetails.put(SFTPConstants.SFTP_REQ_PORT, &22&);
String src = &D:\\DevSoft\\HB-SnagIt1001.rar&; // 本地文件名
String dst = &/home/omc/ylong/sftp/HB-SnagIt1001.rar&; // 目标文件名
SFTPChannel channel = test.getSFTPChannel();
ChannelSftp chSftp = channel.getChannel(sftpDetails, 60000);
OutputStream out = chSftp.put(dst, ChannelSftp.OVERWRITE); // 使用OVERWRITE模式
byte[] buff = new byte[1024 * 256]; // 设定每次传输的数据块大小为256KB
if (out != null) {
System.out.println(&Start to read input stream&);
InputStream is = new FileInputStream(src);
read = is.read(buff, 0, buff.length);
if (read & 0) {
out.write(buff, 0, read);
out.flush();
} while (read &= 0);
System.out.println(&input stream read done.&);
chSftp.put(src, dst, ChannelSftp.OVERWRITE); // 代码段2
// chSftp.put(new FileInputStream(src), dst, ChannelSftp.OVERWRITE); // 代码段3
chSftp.quit();
channel.closeChannel();
注:请分别将代码段1,代码段2,代码段3取消注释,运行程序来进行测试。这三段代码分别演示了如何使用JSch的不同的put方法来进行文件上传。
代码段1:采用向put方法返回的输出流中写入数据的方式来传输文件。 需要由程序来决定写入什么样的数据,这里是将本地文件的输入流写入输出流。采用这种方式的好处是,可以自行设定每次写入输出流的数据块大小,如本示例中的语句:
byte[] buff = new byte[1024 * 256]; // 设定每次传输的数据块大小为256KB
代码段2:直接将本地文件名为src的文件上传到目标服务器,目标文件名为dst。(注:使用这个方法时,dst可以是目录,当dst是目录时,上传后的目标文件名将与src文件名相同)
代码段3:将本地文件名为src的文件输入流上传到目标服务器,目标文件名为dst。
这三段代码实现的功能是一样的,都是将本地的文件src上传到了服务器的dst文件。使用时可根据具体情况选择使用哪种实现方式。
监控传输进度
从前面的介绍中知道,JSch支持在文件传输时对传输进度的监控。可以实现JSch提供的SftpProgressMonitor接口来完成这个功能。
SftpProgressMonitor接口类的定义为:
package com.jcraft.
public interface SftpProgressMonitor{
public static final int PUT=0;
public static final int GET=1;
void init(int op, String src, String dest, long max);
boolean count(long count);
void end();
当文件开始传输时,调用init方法。
当每次传输了一个数据块后,调用count方法,count方法的参数为这一次传输的数据块大小。
当传输结束时,调用end方法。
下面是一个简单的实现:
MyProgressMonitor.java
package com.longyg.
import com.jcraft.jsch.SftpProgressM
public class MyProgressMonitor implements SftpProgressMonitor {
public boolean count(long count) {
transfered = transfered +
System.out.println(&Currently transferred total size: & + transfered + & bytes&);
public void end() {
System.out.println(&Transferring done.&);
public void init(int op, String src, String dest, long max) {
System.out.println(&Transferring begin.&);
package com.longyg.
import java.util.HashM
import java.util.M
import com.jcraft.jsch.ChannelS
public class SFTPTest {
public SFTPChannel getSFTPChannel() {
return new SFTPChannel();
* @param args
* @throws Exception
public static void main(String[] args) throws Exception {
SFTPTest test = new SFTPTest();
Map&String, String& sftpDetails = new HashMap&String, String&();
// 设置主机ip,端口,用户名,密码
sftpDetails.put(SFTPConstants.SFTP_REQ_HOST, &10.9.167.55&);
sftpDetails.put(SFTPConstants.SFTP_REQ_USERNAME, &root&);
sftpDetails.put(SFTPConstants.SFTP_REQ_PASSWORD, &arthur&);
sftpDetails.put(SFTPConstants.SFTP_REQ_PORT, &22&);
String src = &D:\\DevSoft\\HB-SnagIt1001.rar&; // 本地文件名
String dst = &/home/omc/ylong/sftp/HB-SnagIt1001.rar&; // 目标文件名
SFTPChannel channel = test.getSFTPChannel();
ChannelSftp chSftp = channel.getChannel(sftpDetails, 60000);
OutputStream out = chSftp.put(dst, new MyProgressMonitor(), ChannelSftp.OVERWRITE); // 使用OVERWRITE模式
byte[] buff = new byte[1024 * 256]; // 设定每次传输的数据块大小为256KB
if (out != null) {
System.out.println(&Start to read input stream&);
InputStream is = new FileInputStream(src);
read = is.read(buff, 0, buff.length);
if (read & 0) {
out.write(buff, 0, read);
out.flush();
} while (read &= 0);
System.out.println(&input stream read done.&);
chSftp.put(src, dst, new MyProgressMonitor(), ChannelSftp.OVERWRITE); // 代码段2
// chSftp.put(new FileInputStream(src), dst, new MyProgressMonitor(), ChannelSftp.OVERWRITE); // 代码段3
chSftp.quit();
channel.closeChannel();
注意修改的内容仅仅是put方法,在put方法中增加了SftpProgressMonitor的实现类对象monitor作为参数,即添加了对进度监控的支持。
运行,输出结果如下:
Start to read input stream
Currently transferred total size: 262144 bytes
Currently transferred total size: 524288 bytes
Currently transferred total size: 786432 bytes
Currently transferred total size: 1048576 bytes
Currently transferred total size: 1310720 bytes
Currently transferred total size: 1572864 bytes
Currently transferred total size: 1835008 bytes
Currently transferred total size: 2097152 bytes
Currently transferred total size: 2359296 bytes
Currently transferred total size: 2621440 bytes
Currently transferred total size: 2883584 bytes
Currently transferred total size: 3145728 bytes
Currently transferred total size: 3407872 bytes
Currently transferred total size: 3670016 bytes
Currently transferred total size: 3848374 bytes
input stream read done.
当然这个SftpProgressMonitor的实现实在太简单。JSch每次传输一个数据块,就会调用count方法来实现主动进度通知。
现在我们希望每间隔一定的时间才获取一下文件传输的进度。。。看看下面的SftpProgressMonitor实现:
package com.longyg.
import java.text.DecimalF
import java.util.T
import java.util.TimerT
import com.jcraft.jsch.SftpProgressM
public class FileProgressMonitor extends TimerTask implements SftpProgressMonitor {
private long progressInterval = 5 * 1000; // 默认间隔时间为5秒
private boolean isEnd = // 记录传输是否结束
pri // 记录已传输的数据总大小
private long fileS // 记录文件总大小
private T // 定时器对象
private boolean isScheduled = // 记录是否已启动timer记时器
public FileProgressMonitor(long fileSize) {
this.fileSize = fileS
public void run() {
if (!isEnd()) { // 判断传输是否已结束
System.out.println(&Transfering is in progress.&);
long transfered = getTransfered();
if (transfered != fileSize) { // 判断当前已传输数据大小是否等于文件总大小
System.out.println(&Current transfered: & + transfered + & bytes&);
sendProgressMessage(transfered);
System.out.println(&File transfering is done.&);
setEnd(true); // 如果当前已传输数据大小等于文件总大小,说明已完成,设置end
System.out.println(&Transfering done. Cancel timer.&);
stop(); // 如果传输结束,停止timer记时器
public void stop() {
System.out.println(&Try to stop progress monitor.&);
if (timer != null) {
timer.cancel();
timer.purge();
isScheduled =
System.out.println(&Progress monitor stoped.&);
public void start() {
System.out.println(&Try to start progress monitor.&);
if (timer == null) {
timer = new Timer();
timer.schedule(this, 1000, progressInterval);
isScheduled =
System.out.println(&Progress monitor started.&);
* 打印progress信息
* @param transfered
private void sendProgressMessage(long transfered) {
if (fileSize != 0) {
double d = ((double)transfered * 100)/(double)fileS
DecimalFormat df = new DecimalFormat( &#.##&);
System.out.println(&Sending progress message: & + df.format(d) + &%&);
System.out.println(&Sending progress message: & + transfered);
* 实现了SftpProgressMonitor接口的count方法
public boolean count(long count) {
if (isEnd())
if (!isScheduled) {
add(count);
* 实现了SftpProgressMonitor接口的end方法
public void end() {
setEnd(true);
System.out.println(&transfering end.&);
private synchronized void add(long count) {
transfered = transfered +
private synchronized long getTransfered() {
public synchronized void setTransfered(long transfered) {
this.transfered =
private synchronized void setEnd(boolean isEnd) {
this.isEnd = isE
private synchronized boolean isEnd() {
return isE
public void init(int op, String src, String dest, long max) {
// Not used for putting InputStream
再次修改SFTPTest main方法里的put方法,改为使用新的SftpProgressMonitor的实现类对象monitor作为参数,注意新的monitor对象的构造函数需要传入文件大小作为参数:
package com.longyg.
import java.io.F
import java.util.HashM
import java.util.M
import com.jcraft.jsch.ChannelS
public class SFTPTest {
public SFTPChannel getSFTPChannel() {
return new SFTPChannel();
* @param args
* @throws Exception
public static void main(String[] args) throws Exception {
SFTPTest test = new SFTPTest();
Map&String, String& sftpDetails = new HashMap&String, String&();
// 设置主机ip,端口,用户名,密码
sftpDetails.put(SFTPConstants.SFTP_REQ_HOST, &10.9.167.55&);
sftpDetails.put(SFTPConstants.SFTP_REQ_USERNAME, &root&);
sftpDetails.put(SFTPConstants.SFTP_REQ_PASSWORD, &arthur&);
sftpDetails.put(SFTPConstants.SFTP_REQ_PORT, &22&);
String src = &D:\\DevSoft\\HB-SnagIt1001.rar&; // 本地文件名
String dst = &/home/omc/ylong/sftp/HB-SnagIt1001.rar&; // 目标文件名
SFTPChannel channel = test.getSFTPChannel();
ChannelSftp chSftp = channel.getChannel(sftpDetails, 60000);
File file = new File(src);
long fileSize = file.length();
OutputStream out = chSftp.put(dst, new FileProgressMonitor(fileSize), ChannelSftp.OVERWRITE); // 使用OVERWRITE模式
byte[] buff = new byte[1024 * 256]; // 设定每次传输的数据块大小为256KB
if (out != null) {
System.out.println(&Start to read input stream&);
InputStream is = new FileInputStream(src);
read = is.read(buff, 0, buff.length);
if (read & 0) {
out.write(buff, 0, read);
out.flush();
} while (read &= 0);
System.out.println(&input stream read done.&);
chSftp.put(src, dst, new FileProgressMonitor(fileSize), ChannelSftp.OVERWRITE); // 代码段2
// chSftp.put(new FileInputStream(src), dst, new FileProgressMonitor(fileSize), ChannelSftp.OVERWRITE); // 代码段3
chSftp.quit();
channel.closeChannel();
再次运行,结果输出为:
Try to start progress monitor.
Progress monitor started.
Transfering is in progress.
Current transfered: 98019 bytes
Sending progress message: 2.55%
Transfering is in progress.
Current transfered: 751479 bytes
Sending progress message: 19.53%
Transfering is in progress.
Current transfered: 1078209 bytes
Sending progress message: 28.02%
Transfering is in progress.
Current transfered: 3430665 bytes
Sending progress message: 89.15%
transfering end.
Transfering done. Cancel timer.
Try to stop progress monitor.
Progress monitor stoped.
现在,程序每隔5秒钟才会打印一下进度信息。可以修改FileProgressMonitor类里的progressInterval变量的值,来修改默认的间隔时间。
相关 [jsch java sftp] 推荐:
- 编程语言 - ITeye博客
JSch是Java Secure Channel的缩写. JSch是一个SSH2的纯Java实现. 它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序.
本文只介绍如何使用JSch实现的SFTP功能.
SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议.
- Java - 编程语言 - ITeye博客
java程序实现对sftp服务器的操作. FTP服务器中,如果使用的是FTP协议,则用户名和密码是以明文方式传输的,如果是以SFTP 的方式,就会通过加密的方式传输. 如果服务器中的用户增加了公钥的设置,则要求客户端要有相对应的私钥. 公/私钥的产生方法可见:/jsch/examples/KeyGen.java.html,值得注意的是,可以产生用密码的公私钥和无密码的公私钥.
- ITeye博客
如果大家熟悉Linux的话,一定对ssh,sftp,scp等命令非常熟悉. ssh是一个安全协议,用来在不同系统或者服务器之间进行安全连接. ssh 在连接和传送的过程中会加密所有的数据. 具体的解释,大家可以参考百度百科的文档. 地址为:/view/16184.htm.
- ITeye博客
在上面一个帖子里就简单介绍了如何基于jsch实现ssh.. 下面就简单介绍一下如何实现FTP的功能通过JSCH..
上面的代码只是对JSCH的简单包装,也是对JSCH的抛砖引玉. 已有
0 人发表留言,猛击-&&
这里&&-参与讨论. —软件人才免语言低担保 赴美带薪读研.
- 开源软件 - ITeye博客
IIS,Windows自带,可以到[打开或关闭windows功能]里选择IIS,进行安装. freeSSHd ,支持FTP/SFTP/SSH. OpenSSH这个是Linux上的SSH标配,Windows上则可以通过cygwin的方式来安装. FileZilla,支持SFTP. WinSCP,支持SFTP.
- 操作系统 - ITeye博客
从技术角度来分析,几个要求:. 1、从安全方面看,sftp会更安全一点. 2、线上服务器提供在线服务,对用户需要控制,只能让用户在自己的home目录下活动. 3、用户只能使用sftp,不能ssh到机器进行操作. 提供sftp服务,可以用系统自带的internal-sftp,也可以使用vsftpd,这里需求不多,直接选用internal-sftp.
- C1G军火库
近日曝出OpenSSH SFTP 远程溢出漏洞. OpenSSH服务器中如果OpenSSH服务器中没有配置”ChrootDirectory”,普通用户就可以访问所有文件系统的资源,包括 /proc,在&=2.6.x的Linux内核上,/proc/self/maps会显示你的内存布局,/proc/self/mem可以让你任意在当前进程上下文中读写,而综合两者特性则可以造成远程溢出.
- 操作系统 - ITeye博客
sftp服务限制用户登录家目录.
sftp和ftp是两种协议是不同的,sftp是ssh内含的协议,只要sshd服务器启动了,它就可用,它本身不需要ftp服务器启动. 1.查看openssh软件版本,想sftp服务用户只能访问特定的文件目录,版本需要4.8以上.
- votis - 免費資源網路社群
Dropmysite 提供免費的 FTP 備份服務,如果你喜歡自己架設網站,又怕網站空間不夠穩定而造成資料遺失的話,這項服務可以幫你自動備份伺服器裡的資料. 目前 Dropmysite 提供免費 2GB 的備份空間,付費可以升級 50GB 或 100GB ,對於一般網站備份使用已經綽綽有餘,使用者可以自訂備份的週期、要備份的 FTP 路徑,Dropmysite 就會自動建立排程備份,需要時亦可以從網站上將備份檔案下載到電腦裡.
坚持分享优质有趣的原创文章,并保留作者信息和版权声明,任何问题请联系:@。}

我要回帖

更多关于 linux使用ftp传输文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信