c#访问sftp服务
2011-03-24 17:36 zhaoyang 阅读(9306) 评论(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
在把软件上传一下。找了半天怎么没有上传文件的按钮了啊。算了还是不传了,需要的朋友自己下载吧。