zoukankan      html  css  js  c++  java
  • c#访问sftp服务

          一直从事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

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



     

  • 相关阅读:
    operator[],识别读操作和写操作
    COW写时复制
    嵌套类,PIMPL
    类型转换
    String类运算符重载,自己实现
    socket的几个配置函数
    TCP三次握手,四次挥手,状态变迁图
    运算符重载
    友元
    P4016 负载平衡问题(最小费用最大流)
  • 原文地址:https://www.cnblogs.com/studyplay/p/1994151.html
Copyright © 2011-2022 走看看