代码改变世界

c#访问sftp服务

2011-03-24 17:36  zhaoyang  阅读(9286)  评论(5编辑  收藏  举报

      一直从事window开发,所以没有听说过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服务呢?

  问了一下网管,他们使用的是一个叫winscp的软件。所以有个大概思路,调用这个软件进行访问SFTP服务。经过努力终于搞定。发布一下主要代码已被需要的朋友使用。

 

 

Process CommandLine = newProcess();
CommandLine.StartInfo.FileName
= "WinSCP.exe文件路径";
// CommandLine.StartInfo.Arguments = "/log=" + this._logPath;
CommandLine.StartInfo.UseShellExecute = false;
CommandLine.StartInfo.RedirectStandardInput
= true;
CommandLine.StartInfo.RedirectStandardOutput
= true;
CommandLine.StartInfo.CreateNoWindow
= true;
CommandLine.Start();
//username用户名 targetAddress IP地址 portNumber 端口号
CommandLine.StandardInput.WriteLine("open {0}@{1}:{2}, ",
this._username,this._targetAddress.ToString(), this._portNumber);
while (true)
{
lineData
=CommandLine.StandardOutput.ReadLine();
if (lineData.StartsWith("Authenticating"))
{
//为什么不在前面命令的时候录入密码呢?我在自己的服务器上测试的时候就是在上面
录入密码的。但是只要用支付宝的密码就找不到服务。我发现淘宝的密码中含有一个特
殊字符‘/’。我估计在window下是没问题但是到linux操作系统是有问题。我又不是
很熟悉linux操作系统,所以就改成这样。就没问题了。
CommandLine.StandardInput.WriteLine(this._password);
}
if (lineData.StartsWith("Active session"))
break;
if (lineData.StartsWith("ssh-rsa") && String.IsNullOrEmpty
(this._rsaFingerprint))
{
gotoAutoAcceptKey;
}
}
//上传文件到sftp服务器
string command = "put " + fromFile + " " + toFile + " ";
//fromFile要传送的文件路径本地的绝对路径 toFile服务器上保存文件的
路径相对路径
CommandLine.StandardOutput.DiscardBufferedData();
CommandLine.StandardInput.WriteLine(command);
string result = CommandLine.StandardOutput.ReadLine();

  上面代码就完成了数据的传送。1、连接服务器 2、传送数据

  我把常用的WinSCP命令列举一下

  call     执行任意远程Shell命令
  cd       改变远程工作目录
  chmod    改变远程文件权限
  close    关闭会话
  exit     关闭所有会话并结束程序
  get      从远程目录下载文件到本地目录
  help     显示帮助
  keepuptodate 在一个远程目录连续反映本地目录的改变
  lcd      改变本地工作目录
  lls      列出本地目录的内容
  ln       新建远程符号链接
  lpwd     显示本地工作目录
  ls       列出远程目录的内容
  mkdir    新建远程目录
  mv       移动或者重命名远程文件
  open     连接到服务器
  option   设置或显示脚本选项的值
  put      从本地目录上传文件到远程目录
  pwd      显示远程工作目录
  rm       删除远程文件
  rmdir    删除远程目录
  session 列出连接的会话或者选择活动会话
  synchronize 用一个本地目录同步远程目录

举个简单的例子

option echo off
option batch on
option confirm off
open scp://root:123456@192.168.1.60
cd /opt/backup/
option transfer binary
option synchdelete off
synchronize local e:\bb
close
exit

在把软件上传一下。找了半天怎么没有上传文件的按钮了啊。算了还是不传了,需要的朋友自己下载吧。