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。

准备

Sftp的上传下载等操作用到了C#的第三方类库SharpSSH,需要添加压缩包中的3个dll文件 (Tamir.SharpSSH.dll、Org.Mentalis.Security.dll、DiffieHellman.dll)      下载地址

在这里给大家介绍微软的一款工具ILMerge,它可以用来将多个dll合并或将dll合并进winform生成的exe程序,笔者这里用来合并上面3个dll,以减少项目的引用方便管理

SftpHelper类-----亲测通过

 

 class sftpHelper
{
private Session m_session;
private Channel m_channel;
private ChannelSftp m_sftp; /// <summary>
/// 构造函数
/// </summary>
/// <param name="ip">sftp地址</param>
/// <param name="user">sftp用户名</param>
/// <param name="pwd">sftp密码</param>
/// <param name="port">端口,默认20</param>
public sftpHelper(string ip, string user, string pwd, string port = "")
{
int serverport = Int32.Parse(port); JSch jsch = new JSch();
m_session = jsch.getSession(user, ip, serverport); MyUserInfo ui = new MyUserInfo();
ui.setPassword(pwd);
m_session.setUserInfo(ui);
} /// <summary>
/// 连接状态
/// </summary>
public bool Connected { get { return m_session.isConnected(); } } /// <summary>
/// 连接SFTP
/// </summary>
public bool Connect()
{
try
{
if (!Connected)
{
m_session.connect();
m_channel = m_session.openChannel("sftp");
m_channel.connect();
m_sftp = (ChannelSftp)m_channel;
}
return true;
}
catch (Exception ex)
{
return false;
}
} /// <summary>
/// 断开SFTP
/// </summary>
public void Disconnect()
{
if (Connected)
{
m_channel.disconnect();
m_session.disconnect();
}
} /// <summary>
/// SFTP存放文件
/// </summary>
/// <param name="localPath">本地文件路径</param>
/// <param name="remotePath">sftp远程地址</param>
public bool Put(string localPath, string remotePath)
{
try
{
if (this.Connected)
{
Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(localPath);
Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(remotePath);
m_sftp.put(src, dst);
return true;
}
}
catch (Exception ex)
{
return false;
}
return false;
} /// <summary>
/// SFTP获取文件
/// </summary>
/// <param name="remotePath">sftp远程文件地址</param>
/// <param name="localPath">本地文件存放路径</param>
public bool Get(string remotePath, string localPath)
{
try
{
if (this.Connected)
{
Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(remotePath);
Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(localPath);
m_sftp.get(src, dst);
return true;
}
}
catch (Exception ex)
{
return false;
}
return false;
} /// <summary>
/// 删除SFTP文件
/// </summary>
/// <param name="remoteFile">sftp远程文件地址</param>
public bool Delete(string remoteFile)
{
try
{
if (this.Connected)
{
m_sftp.rm(remoteFile);
return true;
}
}
catch
{
return false;
}
return false;
} /// <summary>
/// 移动SFTP文件
/// </summary>
/// <param name="currentFilename">sftp远程文件地址</param>
/// <param name="newDirectory">sftp移动至文件地址</param>
public bool Move(string currentFilename, string newDirectory)
{
try
{
if (this.Connected)
{
Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(currentFilename);
Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(newDirectory);
m_sftp.rename(src, dst);
return true;
}
}
catch (Exception ex)
{
return false;
}
return false;
} /// <summary>
/// 获取SFTP文件列表
/// </summary>
/// <param name="remotePath">sftp远程文件目录</param>
/// <param name="fileType">文件类型</param>
public ArrayList GetFileList(string remotePath, string fileType)
{
try
{ if (this.Connected)
{
Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(remotePath);
ArrayList objList = new ArrayList();
foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry qqq in vvv)
{
string sss = qqq.getFilename();
if (sss.Length > (fileType.Length + ) && fileType == sss.Substring(sss.Length - fileType.Length))
{ objList.Add(sss); }
else { continue; }
} return objList;
}
}
catch
{
return null;
}
return null;
} } //登录验证信息
public class MyUserInfo : UserInfo
{
String passwd; public String getPassword() { return passwd; }
public void setPassword(String passwd) { this.passwd = passwd; } public String getPassphrase() { return null; }
public bool promptPassphrase(String message) { return true; } public bool promptPassword(String message) { return true; }
public bool promptYesNo(String message) { return true; }
public void showMessage(String message) { } }

测试----使用winform

  /// <summary>
/// 下载文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
FolderBrowserDialog dialog = new FolderBrowserDialog();
if (dialog.ShowDialog() == DialogResult.OK)
{
sftpHelper sftp = new sftpHelper("192.168.2.133", "", "admin", "Admin123");
sftp.Connect();
sftp.Get("/home/20171013103113.csv", dialog.SelectedPath);
sftp.Disconnect();
}
} /// <summary>
/// 上传测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "|*.csv";
if (dialog.ShowDialog() == DialogResult.OK)
{
sftpHelper sftp = new sftpHelper("192.168.2.133", "", "admin", "Admin123");
sftp.Connect();
sftp.Put(dialog.FileName, "/home/");
sftp.Disconnect();
} } /// <summary>
/// 删除测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
sftpHelper sftp = new sftpHelper("192.168.2.133", "", "admin", "Admin123");
sftp.Connect();
sftp.Delete("/home/20171013103113.csv");
sftp.Disconnect();
} /// <summary>
/// 移动测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button5_Click(object sender, EventArgs e)
{
sftpHelper sftp = new sftpHelper("192.168.2.133", "", "admin", "Admin123");
sftp.Connect();
sftp.Move("/home/20171013103113.csv", "/home/temp/20171013103113.csv");
sftp.Disconnect();
}

C# Sftp操作的更多相关文章

  1. 使用sftp操作文件并添加事务管理

    本文主要针对文件操作的事务管理,即写文件和删除文件并且能保证事务的一致性,可与数据库联合使用,比如需要在服务器存文件,相应的记录存放在数据库,那么数据库的记录和服务器的文件数一定是要一一对应的,该部分 ...

  2. 通过sftp操作Linux服务器上的文件(java)

    本文为实现对linux服务器文件的操作.windows服务器不支持. 引入jar包:jsch-0.1.42.jar package com.csvreader.sftp; import java.io ...

  3. 使用SSH+SFTP操作终端全解析,告别XShell

    1.前言 在Windows系统下操作远程服务器的方式很多,比如XShell+XFTP组合,亦或是PuTTY+WinSCP组合,但在Mac系统下登陆远程服务器,并没有这些工具供我们使用.相比较而言,在M ...

  4. VBScript调用winscp,实现sftp操作

    最新有一个需求,需要在ssis中调用sftp下载文件,由于服务器上只有framework2.0,并且需要用sqlserver代理调用作业,限制了很多. 首先用的是脚本任务,进程调用winscp.com ...

  5. centos7系统配置记录SFTP操作日志

    1.修改ssh配置 [root@elk-node2 ~]# vim /etc/ssh/sshd_config 大概132行把下面这个句注释掉 #Subsystem       sftp    /usr ...

  6. CentOS下配置SFTP操作日志

    1.修改ssh的配置 vi /etc/ssh/sshd_config 在36行左右修改如下配置 Subsystem sftp /usr/libexec/openssh/sftp-server -l I ...

  7. c# 使用Renci.SshNet.dll操作SFTP总结

    1.操作类 /// <summary> /// SFTP操作类 /// </summary> public class SFTPHelper { #region 字段或属性 p ...

  8. Java使用Sftp实现对跨服务器上传、下载、打包、写入相关操作

    1.Maven引入jar <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch< ...

  9. Linux简单指令操作

    Linux CentOS运维中,常用的操作和命令记录下: 1.DNS设置 在Linux服务器上,当我们ping出现这个错误时:ping: unknown host,很大可能是系统的DNS没有设置或者设 ...

随机推荐

  1. freeradius防止用户异常断开无法重新链接上

    freeradius防止用户异常断开无法重新链接上 http://www.cnblogs.com/klobohyz/archive/2012/02/08/2342532.html 编辑default文 ...

  2. openboot的项目

    http://docs.oracle.com/cd/E19201-01/821-0901-10/OK_OBP.html https://www.openfirmware.info/OpenBIOS h ...

  3. 自动安装jar包到本地仓库

    参考博客:http://blog.csdn.net/m0_37797991/article/details/73394873

  4. LCT 文档

    file:///C:/Users/Frank/Downloads/QTREE%E8%A7%A3%E6%B3%95%E7%9A%84%E4%B8%80%E4%BA%9B%E7%A0%94%E7%A9%B ...

  5. 百度之星资格赛--IP聚合

    IP聚合 Accepts: 1901 Submissions: 4979 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/6553 ...

  6. [PAT] 1141 PAT Ranking of Institutions(25 分)

    After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...

  7. 深度学习方法:受限玻尔兹曼机RBM(四)对比散度contrastive divergence,CD

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 上篇讲到,如果用Gibbs Sa ...

  8. vue-touch不支持vue2.0的替换方法

    当你想用vue-touch时,却发现官网这句话 Touch events plugin for Vue.js. This plugin does not support Vue 2.0 yet. 但是 ...

  9. 前端读者 | Web App开发入门

    本文来自互联网 自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联网界从此就多了一个新的名词 - Web App(意为基于WEB形式的应用程序).业界关于Web App与Nativ ...

  10. 解决ssh登录过慢问题

    1.首先打开debug,看看慢在哪里 [root@BC-NFS1 ~]# ssh -v root@192.168.102.41 -p 22 OpenSSH_6.6.1, OpenSSL 1.0.1e- ...