.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 CET.Finance.SftpWinService.Common
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: this.ConnectSftp();
56: }
57:
58: #region Events
59:
60: /// <summary>
61: /// SFTP获取文件
62: /// </summary>
63: /// <param name="remotePath"></param>
64: /// <param name="localPath"></param>
65: /// <returns></returns>
66:
67: public bool Get(string remotePath, string localPath)
68: {
69: try
70: {
71: string fullRemotePath = defRemotePath + remotePath.TrimStart('/');
72: Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(fullRemotePath);
73: Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(localPath);
74: m_sftp.get(src, dst);
75: return true;
76: }
77: catch
78: {
79: return false;
80: }
81: }
82:
83: /// <summary>
84: ///SFTP存放文件
85: /// </summary>
86: /// <param name="localPath"></param>
87: /// <param name="remotePath"></param>
88: /// <returns></returns>
89: public void Put(string localPath, string remotePath)
90: {
91: Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(localPath);
92: string fullRemotePath = defRemotePath + remotePath.TrimStart('/');
93: Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(fullRemotePath);
94: m_sftp.put(src, dst);
95: }
96:
97:
98: /// <summary>
99: /// 删除SFTP文件
100: /// </summary>
101: /// <param name="remoteFile"></param>
102: /// <returns></returns>
103:
104: public void Delete(string remoteFile)
105: {
106: string fullRemotePath = defRemotePath + remoteFile.TrimStart('/');
107: m_sftp.rm(fullRemotePath);
108: }
109: /// <summary>
110: /// 获取SFTP文件列表
111: /// </summary>
112: /// <param name="remotePath"></param>
113: /// <param name="fileType">文件后缀名称(.txt)</param>
114: /// <returns></returns>
115: public List<string> GetFileList(string remotePath, string fileType)
116: {
117: List<string> objList = new List<string>();
118: string fullRemotePath = defRemotePath + remotePath.TrimStart('/');
119: if (DirExist(fullRemotePath))
120: {
121: Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(fullRemotePath);
122: foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry qqq in vvv)
123: {
124: string sss = qqq.getFilename();
125: if (fileType.Contains(Path.GetExtension(sss)))
126: {
127: objList.Add(sss);
128: }
129: }
130: }
131: return objList;
132: }
133:
134: /// <summary>
135: /// 目录是否存在
136: /// </summary>
137: /// <param name="dirName">目录名称必须从根开始</param>
138: /// <returns></returns>
139: public bool DirExist(string dirName)
140: {
141: try
142: {
143: m_sftp.ls(defRemotePath + dirName.TrimStart('/'));
144: return true;
145: }
146: catch (Tamir.SharpSsh.jsch.SftpException)
147: {
148: return false;//执行ls命令时出错,则目录不存在。
149: }
150: }
151:
152: /// <summary>
153: /// 创建目录
154: /// </summary>
155: /// <param name="dirName">目录名称必须从根开始</param>
156: /// <returns></returns>
157: public void Mkdir(string dirName)
158: {
159: Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(defRemotePath);
160: foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry fileName in vvv)
161: {
162: string name = fileName.getFilename();
163: if (name == dirName)
164: {
165: throw new Exception("dir is exist");
166: }
167: }
168: m_sftp.mkdir(defRemotePath + dirName.TrimStart('/'));
169: }
170:
171: /// <summary>
172: /// 连接SFTP
173: /// </summary>
174: public void ConnectSftp()
175: {
176: JSch jsch = new JSch(); //利用java实现的通讯包
177: m_session = jsch.getSession(this.UserName, this.HostName, this.Port);
178: m_session.setHost(this.HostName);
179: MyUserInfo ui = new MyUserInfo();
180: ui.setPassword(this.Password);
181: m_session.setUserInfo(ui);
182:
183: if (!m_session.isConnected())
184: {
185: m_session.connect();
186: m_channel = m_session.openChannel("sftp");
187: m_channel.connect();
188: m_sftp = (ChannelSftp)m_channel;
189: }
190: }
191:
192: /// <summary>
193: /// 断开SFTP
194: /// </summary>
195: public void DisconnectSftp()
196: {
197: if (m_session.isConnected())
198: {
199: m_channel.disconnect();
200: m_session.disconnect();
201: }
202: }
203:
204: #endregion
205:
206: //登录验证信息
207: private class MyUserInfo : UserInfo
208: {
209: String passwd;
210: public String getPassword() { return passwd; }
211: public void setPassword(String passwd) { this.passwd = passwd; }
212:
213: public String getPassphrase() { return null; }
214: public bool promptPassphrase(String message) { return true; }
215:
216: public bool promptPassword(String message) { return true; }
217: public bool promptYesNo(String message) { return true; }
218: public void showMessage(String message) { }
219: }
220:
221: public void Dispose()
222: {
223: this.DisconnectSftp();
224: this.m_channel = null;
225: this.m_session = null;
226: this.m_sftp = null;
227: }
228: }
229:
230: }
.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; }
.net 操作sftp服务器的更多相关文章
- Linux Centos 6.6搭建SFTP服务器
Linux Centos 6.6搭建SFTP服务器 在Centos 6.6环境使用系统自带的internal-sftp搭建SFTP服务器. 打开命令终端窗口,按以下步骤操作. 0.查看openssh的 ...
- Windows 7下 搭建 基于 ssh 的sftp 服务器
Windows xp 下 搭建 基于 ssh 的sftp 服务器,服务器端可以用 freesshd,F-secure server等,filezilla server不可用,之前傻乎乎的用file ...
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息
1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...
- linux搭建sftp服务器
转自:http://blog.csdn.net/superswordsman/article/details/49331539 最近工作需要用到sftp服务器,被网上各种方法尤其是权限设置问题搞得晕头 ...
- Linux课程---3、Linux远程登录和传输(操作Linux服务器软件)
Linux课程---3.Linux远程登录和传输(操作Linux服务器软件) 一.总结 一句话总结: xshell:Xshell是一个强大的安全终端模拟软件 Xshell是一个强大的安全终端模拟软件, ...
- 搭建SFTP服务器,允许一个或多个用户拥有一个或多个目录的rwx权限
1.引言 sftp可以为传输文件提供一种安全的网络的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式.其实 ...
- Linux ---搭建SFTP服务器
在Centos 6.6环境使用系统自带的internal-sftp搭建SFTP服务器. 打开命令终端窗口,按以下步骤操作. 0.查看openssh的版本 ssh -V 使用ssh -V 命令来查看op ...
- SFTP 服务器cd() 方法和 ls() 方法说明
方法说明: cd():这个方法用于进入某个目录下. 默认情况,当连接SFTP服务器成功后直接进入用户目录,比如我连接自己本机SFTP服务器后进入/Users/mac目录.cd() 方法进入每一个目录都 ...
- Java上传文件至SFTP服务器
Windows搭建SFTP服务器 https://www.cnblogs.com/wangjunguang/p/9453611.html 注意点: 1.以管理员权限运行FreeSSHd 2.如果无法启 ...
随机推荐
- Git远程和分支管理
一.远程 Git是分布式版本控制系统,最重要的优点就是远程仓库托管代码.不用自己搭建一个服务器,在github上面注册一个账户就可免费获取远程仓库. 首先需要先在github上面 ...
- Java中的GOF23(23中设计模式)--------- 单例模式(Singleton)
Java中的GOF23(23中设计模式)--------- 单例模式(Singleton) 在Java这这门语言里面,它的优点在于它本身的可移植性上面,而要做到可移植的话,本身就需要一个中介作为翻译工 ...
- Jquery UI 和Easy UI常用插件
一.Jquery的插件简介 (一)什么是插件 插件(Plug-in)是一种遵循一定的应用程序接口规范编写出来的程序,是原有系统平台或应用软件平台功能的一种扩展和补充. 注意!!其只能在程序规定的系统平 ...
- 【我的产品观】开发wangEditor一年总结
1. 引言 标题说是一周年,其实是不是正好是一周年,我也忘记了,光从github的提交记录看也不准确.印象中觉得,如果要论想法,到现在一年多了,如果要论实际写代码,可能差不多正好一年. 从8月底在济南 ...
- Dropplets – 极简的 Markdown 博客平台
Dropplets 是一个简单的博客平台,专注于提供正是你在博客解决方案中需要的.当涉及到基础的博客功能,你真正想要做的是写和发表,而这就是 Dropplets 的过人之处.Dropplets 是一个 ...
- 【javascript激增的思考03】MVVM与Knockout
前言 今天搞的有点快,因为上午简单研究了下MVC,发现MVC不太适合前端开发,然后之前看几位前端前辈都推荐前端使用MVVM,但是我对其还不甚了解,所以我觉得下午还是应该先看看他是神马先,后面再决定要不 ...
- MSCRM 2013/2015 Ribbon Editor
由于新版本2015的解决方案与之前有变化,因此许多老的Tools已经不能使用,推荐给大家新的Ribbon Editor Tool. 下载地址: http://www.develop1.net/publ ...
- 兼容Android的水波纹效果
Android的水波纹效果只有高版本才有,我们希望自己的应用在低版本用低版本的阴影,高版本用水波纹,这怎么做呢?其实,只要分drawable和drawablev21两个文件夹就好了. 普通情况下的se ...
- 项目管理、测试管理、代码bug 管理
1.友盟统计 阿里旗下的产品 http://www.umeng.com/ 2.bugly 腾讯旗下的产品 http://bugly.qq.com/ 3.禅道 项目管理工具 需要部署到 ...
- 拓展:使用终端创建、编译、链接OC…
本文介绍一下如何使用Mac OS X自带终端快速创建.编译.链接OC程序. 1.打开终端 顺序:打开Finder——应用程序——实用工具——终端 2.打开需要存放 .m 文件的路径(比如我需要放到桌面 ...