名词解释(百度百科)

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。

代码实现:

1.添加引用 Renci.SshNet(通过Nuget下载)

https://www.nuget.org/packages/SSH.NET/2013.4.7

2.核心代码

const int port = ; //端口
const string host = " "; //sftp地址
const string username = " "; //用户名
const string password = " ";//密码
const string workingdirectory = "/";//读取、上传文件的目录 "/"为根目录
const string uploadfile = @"c:\1.xml"; //上传文件地址 using (var client = new SftpClient(host, port, username, password)) //创建连接对象
{
client.Connect(); //连接 client.ChangeDirectory(workingdirectory); //切换目录 var listDirectory = client.ListDirectory(workingdirectory); //获取目录下所有文件 foreach (var fi in listDirectory) //遍历文件
{
Console.WriteLine(" - " + fi.Name);
// client.DeleteFile(fi.FullName);//删除文件
} using (var fileStream = new FileStream(uploadfile, FileMode.Open))
{
client.BufferSize = * ; // bypass Payload error large
client.UploadFile(fileStream, Path.GetFileName(uploadfile)); //上传文件
//UploadFile方法没有返回值,无法判断文件是否上传成功,我想到的解决办法是,上传后再获取一下文件列表,如果文件列表count比上传之前大,说明上传成功。当然
//这样的前提是只有你一个人上传。不知各位大神有没有其它办法
}
Console.ReadKey();

完整示例:

/*
get SSH.NET (BSD License: http://sshnet.codeplex.com/license) with NuGet:
>Install-Package SSH.NET -Version 2013.4.7 or just get the dll from here: http://j.mp/sshNet */
using System;
using System.Collections.Generic;
using Renci.SshNet; /* reference needed: Renci.SshNet.dll */ class Program
{
static void Main(string[] args){ // Setup Credentials and Server Information
ConnectionInfo ConnNfo = new ConnectionInfo("hostOrIP",,"username",
new AuthenticationMethod[]{ // Pasword based Authentication
new PasswordAuthenticationMethod("username","password"), // Key Based Authentication (using keys in OpenSSH Format)
new PrivateKeyAuthenticationMethod("username",new PrivateKeyFile[]{
new PrivateKeyFile(@"..\openssh.key","passphrase")
}),
}
); // Execute a (SHELL) Command - prepare upload directory
using (var sshclient = new SshClient(ConnNfo)){
sshclient.Connect();
using(var cmd = sshclient.CreateCommand("mkdir -p /tmp/uploadtest && chmod +rw /tmp/uploadtest")){
cmd.Execute();
Console.WriteLine("Command>" + cmd.CommandText);
Console.WriteLine("Return Value = {0}", cmd.ExitStatus);
}
sshclient.Disconnect();
} // Upload A File
using (var sftp = new SftpClient(ConnNfo)){
string uploadfn = "Renci.SshNet.dll"; sftp.Connect();
sftp.ChangeDirectory("/tmp/uploadtest");
using (var uplfileStream = System.IO.File.OpenRead(uploadfn)){
sftp.UploadFile(uplfileStream, uploadfn, true);
}
sftp.Disconnect();
} // Execute (SHELL) Commands
using (var sshclient = new SshClient(ConnNfo)){
sshclient.Connect(); // quick way to use ist, but not best practice - SshCommand is not Disposed, ExitStatus not checked...
Console.WriteLine(sshclient.CreateCommand("cd /tmp && ls -lah").Execute());
Console.WriteLine(sshclient.CreateCommand("pwd").Execute());
Console.WriteLine(sshclient.CreateCommand("cd /tmp/uploadtest && ls -lah").Execute());
sshclient.Disconnect();
}
Console.ReadKey();
}
}

c#连接SFTP上传文件的更多相关文章

  1. 使用SFTP上传文件到服务器的简单使用

    最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询 /** * 将文件上传到服务器 * * @param filePath * 文件路径 * @param channelSftp ...

  2. sftp上传文件(Renci.SshNet)和代理上传

    引用Renci.SshNet这个 封装的sftp类 public class SFTPHelper { #region 字段或属性 private SftpClient sftp; /// <s ...

  3. SFTP 上传文件夹

    使用sftp上传文件夹时若使用如下命令并不work: put /media/Research/GWAS_Class/* Desktop/ 此时,需要添加一个参数 -r, 另外在目标文件夹下面建立一个同 ...

  4. SecureCRT sftp上传文件报错:put: failed to upload xxx 拒绝访问

    1.问题 使用sftp上传文件时报错:put: failed to upload xxx 拒绝访问.类似下图所示: 2.原因 造成这个问题的原因可能有两个,一是要上到的那个目录剩余磁盘空间不足,二是打 ...

  5. 用sftp上传文件至linux服务器

    1.项目环境 框架:springmvc    项目管理工具:maven 2.必须使用的jar com.jcraft jsch 0.1.27 test 3.新建一个FileUpDown工具类,在类中添加 ...

  6. Java通过sftp上传文件

    Linux操作系统我们经常使用ssh中的ftp,sftp连接服务器,做相应操作. 如何通过java代码的形式采用sftp连接到服务器,进行文件上传下载等操作呢? 第一步,引入依赖包 <!-- s ...

  7. php使用sftp上传文件

    搞这个SFTP文件传输搞了一整天真是醉了,从sftp安装,到php的ssh2扩展安装,最后到php应用ssh2来上传文件:最后就没有最后了 Failure creating remote file: ...

  8. python连接服务器上传文件,后台执行命令

    上传文件 import os import paramikoimport logging from django.core.cache import cache from YunTai import ...

  9. C#远程执行Linux系统中Shell命令和SFTP上传文件

    一.工具:SSH.Net 网址:https://github.com/sshnet/SSH.NET 二.调用命令代码: Renci.SshNet.SshClient ssh = "); ss ...

随机推荐

  1. c语言中动态数组的建立

    一维动态数组的创建,这个比较简单,直接上代码 #define _CRT_SECURE_NO_DEPRECATE #include<stdio.h> #include<stdlib.h ...

  2. 抓发请求&设置默认工程

    反向代理:外网服务器接受来自Internet的请求,转发到内网服务器. iptables转发:只有root才能使用1024以下的端口,域名的默认端口为80,一般不会给开发者提供root密码的.一台优质 ...

  3. Nginx 常用伪静态配置

    1. /a/b?c=d => index.php?_a=a&_m=b&c=d 2. /xxx/detail-yyy.html => index.php?_a=xxx& ...

  4. “”?: H3C SSH 配置+

    开启ssh 服务 ssh service enable 创建用户 使用ssh local-user ssh 用户级别 authorization-attribute user-role level-1 ...

  5. Android学习整理之Activity生命周期篇

    一.Activity生命周期说明   Activity的四种状态: ⒈活动状态(Active or Running):也称为运行状态,处于Activity栈顶,在用户界面中最上层,完全能被用户看到,能 ...

  6. libqrencode 3.4.3 发布,二维码的C解析库

    libqrencode 3.4.3 的命令行增加了 --rle 参数,修复了开发库和命令行工具的一些小 bug. libqrencode (QRencode) 是一个用C语言编写的用来解析二维条形码( ...

  7. ASP.NET中的KRE是什么?

    KRE的英文全称是K Runtime Environment,其中K是ASP.NET vNext(后来叫ASP.NET 5)的项目代号. KRE是ASP.NET 5运行时环境,它是ASP.NET 5的 ...

  8. 检查密码复杂度的C#正则表达式

    在用户注册与修改.重置密码时,强制密码达到一定的复杂度,是减少盗号的有效措施之一. 而在代码中检查密码复杂度就需要用到正则表达式,比如要求密码必须包含数字.小写或大写字母.特殊字符.字符数在8-30之 ...

  9. JsCss笔记

    1.  &= 不应该在 Bool 型变量中使用. a &= b  对于Js来说是:  a = a & b ;  a 本来是 bool , &= 之后就变成了 Int. ...

  10. (译)开发优秀的虚拟现实体验:从开发I Expect You to Die中总结的六个要点

    这篇文章是我从网上找来的,我觉得他非常详细的解释了VR发展的需求和必要.我认为通过这篇文章可以让大家了解VR. 译者写在最前: 来到追光动画有好几个月了,抱歉这段时间也没有什么文章与大家分享,我现在在 ...