.net 操作sftp服务器

因为项目的需要,整理了一段C#操作sftp的方法。

依赖的第三方类库名称为:SharpSSH 1.1.1.13.

代码如下:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using System.Collections.Specialized;
   6:  using System.Configuration;
   7:  using Tamir.SharpSsh;
   8:  using System.IO;
   9:  using Tamir.SharpSsh.jsch;
  10:   
  11:  namespace TestSftp
  12:  {
  13:      /// <summary>
  14:      /// 访问Sftp服务器方法(凭证请在config文件中配置)
  15:      /// </summary>
  16:      public class SftpClient : IDisposable
  17:      {
  18:          #region Properties
  19:   
  20:          /// <summary>
  21:          /// 主机名或IP
  22:          /// </summary>
  23:          public string HostName { get; private set; }
  24:          /// <summary>
  25:          /// 用户名
  26:          /// </summary>
  27:          public string UserName { get; private set; }
  28:          /// <summary>
  29:          /// 密码
  30:          /// </summary>
  31:          public string Password { get; private set; }
  32:   
  33:          /// <summary>
  34:          /// 端口号(默认端口为22)
  35:          /// </summary>
  36:          public int Port { get; private set; }
  37:   
  38:          #endregion        
  39:   
  40:          private static readonly string defRemotePath = "/";//默认操作是都是从根目录开始。
  41:          private ChannelSftp m_sftp;
  42:          private Session m_session;
  43:          Channel m_channel;
  44:   
  45:          /// <summary>
  46:          /// 从配置文件中加载凭证信息
  47:          /// </summary>       
  48:          public SftpClient()
  49:          {
  50:              var config = ConfigurationManager.GetSection("SftpServer") as NameValueCollection;
  51:              this.HostName = config["host_name"];
  52:              this.UserName = config["user_name"];
  53:              this.Password = config["password"];
  54:              this.Port = Convert.ToInt32(config["port"] ?? "22");//默认端口为22       
  55:          }
  56:   
  57:          #region Events
  58:   
  59:          /// <summary>
  60:          /// SFTP获取文件   
  61:          /// </summary>
  62:          /// <param name="remotePath"></param>
  63:          /// <param name="localPath"></param>
  64:          /// <returns></returns>
  65:   
  66:          public bool Get(string remotePath, string localPath)
  67:          {
  68:              try
  69:              {
  70:                  string fullRemotePath = defRemotePath + remotePath.TrimStart(‘/‘);
  71:                  Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(fullRemotePath);
  72:                  Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(localPath);
  73:                  m_sftp.get(src, dst);
  74:                  return true;
  75:              }
  76:              catch
  77:              {
  78:                  return false;
  79:              }
  80:          }
  81:   
  82:          /// <summary>
  83:          ///SFTP存放文件   
  84:          /// </summary>
  85:          /// <param name="localPath"></param>
  86:          /// <param name="remotePath"></param>
  87:          /// <returns></returns>
  88:          public void Put(string localPath, string remotePath)
  89:          {
  90:              Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(localPath);
  91:              string fullRemotePath = defRemotePath + remotePath.TrimStart(‘/‘);
  92:              Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(fullRemotePath);
  93:              m_sftp.put(src, dst);
  94:          }
  95:   
  96:   
  97:          /// <summary>
  98:          /// 删除SFTP文件 
  99:          /// </summary>
 100:          /// <param name="remoteFile"></param>
 101:          /// <returns></returns>
 102:   
 103:          public void Delete(string remoteFile)
 104:          {
 105:              string fullRemotePath = defRemotePath + remoteFile.TrimStart(‘/‘);
 106:              m_sftp.rm(fullRemotePath);
 107:          }
 108:          /// <summary>
 109:          /// 获取SFTP文件列表   
 110:          /// </summary>
 111:          /// <param name="remotePath"></param>
 112:          /// <param name="fileType">文件后缀名称(.txt)</param>
 113:          /// <returns></returns>
 114:          public List<string> GetFileList(string remotePath, string fileType)
 115:          {
 116:              string fullRemotePath = defRemotePath + remotePath.TrimStart(‘/‘);
 117:              Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(fullRemotePath);
 118:              List<string> objList = new List<string>();
 119:              foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry qqq in vvv)
 120:              {
 121:                  string sss = qqq.getFilename();
 122:                  if (sss.Length > (fileType.Length + 1) && fileType == sss.Substring(sss.Length - fileType.Length))
 123:                  { objList.Add(sss); }
 124:                  else { continue; }
 125:              }
 126:              return objList;
 127:          }
 128:   
 129:          /// <summary>
 130:          /// 目录是否存在
 131:          /// </summary>
 132:          /// <param name="dirName">目录名称必须从根开始</param>
 133:          /// <returns></returns>
 134:          public bool DirExist(string dirName)
 135:          {
 136:              try
 137:              {
 138:                  m_sftp.ls(defRemotePath + dirName.TrimStart(‘/‘));
 139:                  return true;
 140:              }
 141:              catch (Tamir.SharpSsh.jsch.SftpException)
 142:              {
 143:                  return false;//执行ls命令时出错,则目录不存在。
 144:              }
 145:          }
 146:   
 147:          /// <summary>
 148:          /// 创建目录
 149:          /// </summary>
 150:          /// <param name="dirName">目录名称必须从根开始</param>
 151:          /// <returns></returns>
 152:          public void Mkdir(string dirName)
 153:          {
 154:              Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(defRemotePath);
 155:              foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry fileName in vvv)
 156:              {
 157:                  string name = fileName.getFilename();
 158:                  if (name == dirName)
 159:                  {
 160:                      throw new Exception("dir is exist");
 161:                  }
 162:              }
 163:              m_sftp.mkdir(defRemotePath + dirName.TrimStart(‘/‘));
 164:          }
 165:   
 166:          /// <summary>
 167:          /// 连接SFTP   
 168:          /// </summary>
 169:          public void ConnectSftp()
 170:          {
 171:              JSch jsch = new JSch();   //利用java实现的通讯包  
 172:              m_session = jsch.getSession(this.UserName, this.HostName, this.Port);
 173:              m_session.setHost(this.HostName);
 174:              MyUserInfo ui = new MyUserInfo();
 175:              ui.setPassword(this.Password);
 176:              m_session.setUserInfo(ui);
 177:   
 178:              if (!m_session.isConnected())
 179:              {
 180:                  m_session.connect();
 181:                  m_channel = m_session.openChannel("sftp");
 182:                  m_channel.connect();
 183:                  m_sftp = (ChannelSftp)m_channel;
 184:              }
 185:          }
 186:   
 187:          /// <summary>
 188:          /// 断开SFTP    
 189:          /// </summary>
 190:          public void DisconnectSftp()
 191:          {
 192:              if (m_session.isConnected())
 193:              {
 194:                  m_channel.disconnect();
 195:                  m_session.disconnect(); 
 196:              }
 197:          }      
 198:   
 199:   
 200:   
 201:          #endregion       
 202:   
 203:          //登录验证信息            
 204:          private class MyUserInfo : UserInfo
 205:          {
 206:              String passwd;
 207:              public String getPassword() { return passwd; }
 208:              public void setPassword(String passwd) { this.passwd = passwd; }
 209:   
 210:              public String getPassphrase() { return null; }
 211:              public bool promptPassphrase(String message) { return true; }
 212:   
 213:              public bool promptPassword(String message) { return true; }
 214:              public bool promptYesNo(String message) { return true; }
 215:              public void showMessage(String message) { }
 216:          }
 217:   
 218:          public void Dispose()
 219:          {
 220:              this.DisconnectSftp();
 221:          }
 222:      }
 223:   
 224:   
 225:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

 

配置文件内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="SftpServer" type="System.Configuration.NameValueSectionHandler"/>
  </configSections>
  
  <SftpServer>
    <add key="host_name" value="127.0.0.1"/>
    <add key="user_name" value="test"/>
    <add key="password" value="123"/>
  </SftpServer>   
  
</configuration>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

时间: 2024-10-10 12:46:50

.net 操作sftp服务器的相关文章

.net 对sftp服务器上文件的操作

由于服务商从FTP服务器迁移到SFTP服务器,唉~~~,苦逼的我们就改来该去的吧.现在来稍微说说这个是怎么实现的. ----------------------------------------我是无耻的分割线------------------------------------------------------------ 就不赘述FTP和SFTP的区别了,只提一点在一定的程度上后者更安全,需要的同学请移步http://www.cnblogs.com/mfryf/archive/2013

Linux Centos 6.6搭建SFTP服务器

在Centos 6.6环境使用系统自带的internal-sftp搭建SFTP服务器. 打开命令终端窗口,按以下步骤操作. 0.查看openssh的版本 1 ssh -V 使用ssh -V 命令来查看openssh的版本,版本必须大于4.8p1,低于的这个版本需要升级. 1.创建sftp组 1 groupadd sftp 2.创建一个sftp用户,用户名为mysftp,密码为mysftp 修改用户密码和修改Linux用户密码是一样的. useradd -g sftp -s /bin/false

Windows 7下 搭建 基于 ssh 的sftp 服务器

Windows  xp 下 搭建 基于  ssh 的sftp 服务器,服务器端可以用 freesshd,F-secure server等,filezilla server不可用,之前傻乎乎的用filezilla 来做服务器,找不到任何有关sftp的配置选项,推荐用freesshd,免费.简单,直观,客户端可以用一般的支持sftp的都可以,filezilla,f-secure client 等,我用freesshd和filezillazilla 搭建sftp 服务,我在内网搭建的,如果在外网发布,

linux搭建sftp服务器

转自:http://blog.csdn.net/superswordsman/article/details/49331539 最近工作需要用到sftp服务器,被网上各种方法尤其是权限设置问题搞得晕头转向,现在将自己搭建过程总结了一下,整理出来一种最简单的方法可供大家参考. 第1歩,添加sftp用户并制定根目录:useradd -d  /home/sftp  -s /sbin/nologin sftpuser 第2歩,修改密码:执行passwd sftpuser,然后输入密码2次即可 第3歩,修

java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息

1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html https://www.cnblogs.com/longyg/archive/2012/06/25/2561332.html https://www.cnblogs.com/qdwyg2013/p/5650764.html#top 引入jar包的maven依赖如下所示:

Memcache 学习笔记(二)---- PHP 脚本操作 Memcache 服务器

 PHP 脚本操作 Memcache 服务器 一.PHP脚本操作Memcache方法 使用 PHP 脚本操作 Memcache,在 PHP 手册中有详细的介绍,我们可以实例化 Memcache 类,根据需求调取对象方法.Memcached 是较 Memcache 更加 强大的类库,功能更多,这里只介绍Memcache. 部分方法介绍: 1.Memcache::add - 增加一个条目到缓存服务器 2.Memcache::addServer - 向连接池中添加一个memcache服务器 3.Mem

cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式

cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式 一.在Windows环境下搭建SFTP服务器可参见http://www.cnblogs.com/Kevin00/p/6341295.html 二.非密钥登录 0.Bitvise SSH Server服务器 1.Win + R 进入cmd窗口. 2.登录命令:sftp -P 28 [email protected] 说明:-P 端口参数 28是端口,默认端口是22   kevin是登录的用户名,127.0.0.1是SFTP服务器的

Linux下配置SFTP服务器

最近在做一个微信支付水电费的项目,是与兴业银行合作的项目,按照银行的要求要配置一个SFTP服务器,上传每天缴费的对账单到SFTP服务器里面,经过一段时间的摸索,终于配置成功了,跟大家分享一下,配置过程如下: 0.查看openssh的版本 1. ssh -V 使用ssh -V 命令来查看openssh的版本,版本必须大于4.8p1,低于的这个版本需要升级. 1.创建sftp组 1. groupadd sftp 2.创建一个sftp用户,用户名为mysftp,密码为mysftp 修改用户密码和修改L

SFTP服务器搭建

今天公司业务部门说要测试一款产品,需要FTP服务器,本来想给他们使用pure-ftp,但是他们指定要SFTP服务器. 我从来都没搭建过,正好借此机会部署测试一下 SFTP访问会使用本地系统账号,而非其他ftp服务器那样可以使用虚拟账号 1 软件包(大多数系统已默认安装) openssh openssh-clients openssh-server 2 创建ftp组与ftp账号 在创建账号时,禁止ssh登录,并将账号加入ftpgroup,账号密码为123456 # groupadd ftpgrou