sftp协议介绍
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
代码demo
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import java.util.Vector; import org.apache.commons.lang3.StringUtils; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import com.jcraft.jsch.SftpException; /** * sftp工具类 * * @author cuigh * */ public class SftpUtils { public static void main(String[] args) { SftpUtils .upload("/usr/temp/", "d:\\temp\\bak.txt", NginSftpUtils.connect()); } /** * 默认连接sftp服务器 * * @return ChannelSftp */ public static ChannelSftp connect() { String host = BasePropertiesUtils.getValue("nginf.sftp.ip"); int port = Integer.parseInt(BasePropertiesUtils.getValue("nginf.sftp.port")); String username = BasePropertiesUtils.getValue("nginf.sftp.username"); String password = BasePropertiesUtils.getValue("nginf.sftp.password"); return connect(host, port, username, password); } /** * 连接sftp服务器 * * @param host * 主机 * @param port * 端口 * @param username * 用户名 * @param password * 密码 * @return */ public static ChannelSftp connect(String host, int port, String username, String password) { ChannelSftp sftp = null; try { JSch jsch = new JSch(); jsch.getSession(username, host, port); Session sshSession = jsch.getSession(username, host, port); System.out.println("Session created."); sshSession.setPassword(password); Properties sshConfig = new Properties(); sshConfig.put("StrictHostKeyChecking", "no"); sshSession.setConfig(sshConfig); sshSession.connect(); System.out.println("Session connected."); System.out.println("Opening Channel."); Channel channel = sshSession.openChannel("sftp"); channel.connect(); sftp = (ChannelSftp) channel; System.out.println("Connected to " + host + "."); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } return sftp; } /** * 上传文件 * * @param directory * 上传的目录 * @param uploadFile * 要上传的文件 * @param sftp */ public static void upload(String directory, String uploadFile, ChannelSftp sftp) { /*sftp.cd(directory); sftp.cd(dest); sftp.mkdir(dest); File file = new File(uploadFile); sftp.put(new FileInputStream(file), file.getName());*/ mkDir(directory, sftp); InputStream in = null; try { sftp.cd(directory); File file = new File(uploadFile); in = new FileInputStream(file); sftp.put(new FileInputStream(file), file.getName()); } catch (SftpException | FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 下载文件 * * @param directory * 下载目录 * @param downloadFile * 下载的文件 * @param saveFile * 存在本地的路径 * @param sftp */ public static void download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) { try { sftp.cd(directory); File file = new File(saveFile); sftp.get(downloadFile, new FileOutputStream(file)); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 删除文件 * * @param directory * 要删除文件所在目录 * @param deleteFile * 要删除的文件 * @param sftp */ public static void delete(String directory, String deleteFile, ChannelSftp sftp) { try { sftp.cd(directory); sftp.rm(deleteFile); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 列出目录下的文件 * * @param directory * 要列出的目录 * @param sftp * @return * @throws SftpException */ public static Vector listFiles(String directory, ChannelSftp sftp) throws SftpException { return sftp.ls(directory); } /** * 打开指定目录 * * @param directory * directory * @return 是否打开目录 */ public static boolean openDir(String directory,ChannelSftp sftp) { try { sftp.cd(directory); return true; } catch (SftpException e) { return false; } } /** * 创建指定文件夹 * * @param dirName * dirName */ public static void mkDir(String dirName,ChannelSftp sftp) { String[] dirs = dirName.split("/"); try { String now = sftp.pwd(); sftp.cd("/"); for (int i = 0; i < dirs.length; i++) { if (StringUtils.isNotEmpty(dirs[i])) { boolean dirExists = openDir(dirs[i],sftp); if (!dirExists) { sftp.mkdir(dirs[i]); sftp.cd(dirs[i]); } } } sftp.cd(now); } catch (SftpException e) { e.printStackTrace(); } } }
相关推荐
总的来说,C#和Renci.SshNet为开发人员提供了一个强大且灵活的工具集,用于处理SFTP文件操作,同时可以通过回调机制轻松地实现进度监控,提升用户体验。在你的SFTPtest工程中,你可以找到一个完整的示例,包含了编译...
这个DEMO提供了一个实用的FTP工具类,非常适合开发者进行学习和参考。 首先,SpringBoot是一个由Pivotal团队提供的开源框架,它简化了在Java环境中创建生产级的基于Spring的应用程序的过程。通过自动配置和“起步...
基于EJB的真实世界模型,附源代码,部分功能需JSP配合完成。 J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少...
基于EJB的真实世界模型,附源代码,部分功能需JSP配合完成。 J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少...
在“C#远程备份、单机备份自写Demo”项目中,开发者可能已经实现了上述功能,并通过一个简洁的用户界面或命令行工具提供给客户使用。文件列表中的“远程备份”可能是指项目中包含的示例代码或配置文件,用于演示如何...
此外,可能还有对应的Java源代码,包括Action类(Struts)、Service类(业务逻辑)和DAO(数据访问对象)类(用于与数据库交互)。这些文件共同构成了一个完整的SSH应用实例,可以帮助初学者理解如何在实际项目中...
1. Socket编程:C#中的System.Net.Sockets命名空间提供了Socket类,用于实现TCP/IP或UDP通信,是构建远程工具的基础。 2. TCP/UDP协议:TCP提供可靠的数据传输,适用于需要保证数据完整性的场景;UDP则更轻量级,...
标签中的"源码"可能指的是这个示例提供了具体的代码实现,而"工具"可能指的是JSch这样的库作为整合SSH服务的工具。 在实际项目中,SSH整合可能会更复杂,比如涉及到文件传输(SFTP)、端口转发、隧道建立等高级功能...
例如,通过SharpSSH,我们可以编写C#代码来执行远程服务器的备份脚本,然后将备份文件通过SFTP上传到另一个安全的位置。 此外,SharpSSH还支持SSH公钥认证,这为无密码登录提供了可能,增强了安全性。用户可以生成...
PBL是PowerBuilder库文件的扩展名,其中包含了对象、类、函数和其他可重用的代码组件。 FTP(File Transfer Protocol)则是一种用于在网络上进行文件传输的标准协议。它允许用户从一个远程服务器上传或下载文件,...
3. **SFTP(Secure File Transfer Protocol)**:QSsh还提供了SFTP服务,允许用户安全地在本地和远程主机之间传输文件。这包括文件的上传、下载、重命名、删除等操作。 4. **事件驱动模型**:QSsh基于Qt的异步事件...
为了深入理解这个FTP客户端的实现,你需要阅读和分析源代码,了解每个类和函数的作用,以及它们如何协同工作。此外,理解QT的信号和槽机制也很关键,因为这是QT中事件驱动编程的基础。最后,熟悉FTP协议的细节将有助...
在C#程序中,你可以通过Process类调用Plink命令,从而实现与Linux系统的通信。例如,你可以创建一个新的Process实例,设置其StartInfo属性,包括Plink的路径、目标主机、用户名和密码,然后启动进程执行远程命令。 ...
这些库提供了实现SSH2连接、文件传输、隧道建立等功能的类和方法。 1. 获取SSH2库: - JSch:一个流行的Java SSH2实现,可以在官方网站(https://www.jcraft.com/jsch/)下载最新版本的JSch库。它提供了丰富的API,...
在"设备扳手采集demo及插件"这个项目中,我们可以理解为这是一个用于数据采集的工具,其可能包含了C#编写的各种插件,用于连接不同的硬件设备,如传感器或者控制器,进行数据的读取和处理。在与前端交互时,这些插件...
描述中提到,这是一个“ftp上传测试demojava代码”,这意味着我们将会看到一个Java程序,该程序包含了FTP客户端的实现,用于连接到FTP服务器进行文件操作。"idea的springboot项目"提示我们,开发环境是JetBrains的...
Timer类可以用来安排一个任务(使用TimerTask抽象类实现)在将来的某个时间执行一次,或定期重复执行。它适用于那些需要周期性执行或延时执行的任务。在本文的案例中,Timer用于初始化文件夹监听任务,TimerTask则...
在Python编程环境中,当需要与Linux服务器进行交互,如执行远程命令、文件传输等操作时,Paramiko模块是一个非常实用的工具。Paramiko是一个纯Python实现的SSHv2协议库,支持加密和认证机制,包括公钥、私钥以及密码...
Volley是一个高效的网络库,适合处理小量、快速的网络请求,它内置了图片加载优化和请求队列管理,适合新闻、社交类应用。 对于大文件的下载,Android提供DownloadManager服务,可以处理后台下载、断点续传等功能。...
FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在计算机之间传输文件。...同时,注意FTP的安全问题,尽量使用FTPS(FTP over SSL/TLS)或SFTP(SSH File Transfer Protocol)来提高数据传输的安全性。