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. 在linux内核中获得比jiffies精度更高的时间值【转】

    转自:http://blog.chinaunix.net/uid-20672257-id-2831219.html 内核一般通过jiffies值来获取当前时间.尽管该数值表示的是自上次系统启动到当前的 ...

  2. C 实现有追求的线程池 探究

    引言 线程池很普通的老话题,讨论的很多.深入的不多,也就那些基础库中才能见到这种精妙完备的技巧.而本文随大流 想深入简述一种高效控制性强的一种线程池实现. 先引入一个概念, 惊群. 简单举个例子. 春 ...

  3. Smarty模板快速入门

    文件下载 1.下载地址:http://www.smarty.net/ 2.我下载的版本是3.1.27 ,将下载的文件smarty-3.1.27.zip解压出来,然后将libs文件夹的所有文件复制到你的 ...

  4. vue点击切换颜色限制个数(用了mui框架)

    vue点击切换颜色 只能点击一个 <!doctype html> <head> <meta charset="UTF-8"> <title ...

  5. WordPress个人博客搭建

    搭建LNMP环境 请参考前面的博文自行搭建 部署WordPress #创建数据库和用户 mysql -uroot -p123456 -S /data/3306/mysql.sock create da ...

  6. mysql远程访问cannot connect(10038) 问题解决的过程

    今天用Navicat访问虚拟机上的mysql,无法访问报cannot connect(10038). 首先看是否可以telnet,本机cmd,telnet 192.168.209.128 3306,结 ...

  7. Oracle SQL中实现indexOf和lastIndexOf功能

    Oracle SQL中实现indexOf和lastIndexOf功能 https://www.2cto.com/database/201305/210470.html

  8. shopnc 店铺二级分类添加商品

    $class_2 = $goods_class[$gc_id]['gc_parent_id']; $class_1 = $goods_class[$class_2]['gc_parent_id']; ...

  9. Ubuntu Nginx

    如果是阿云的ECS服务器,默认是已经安装了Apache服务器的,但一般都用不到,可以选择将它卸载 sudo service apache2 stop update-rc.d -f apache2 re ...

  10. 虚拟机Visualbox安装CentOS

    选择安装CentOS系统 进入了安装界面,选择语言,并选择继续 安装的主界面 1.先选择日期时间,选择了亚洲,并选择上海,再点击左上角的完成按钮 2.再选择键盘,选择英文 3.选择语言为英语 4.选择 ...