• 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

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



     

  • 相关阅读:
    mysql数据库安装,启动和关闭
    python学习笔记(xlsxwriter模块使用)
    redis集群搭建
    gpasswd 命令详解
    linux CPU使用率过高或负载过高的处理思路
    Django模型(ORM)
    Django模板层(template)
    Windows下安装node.js(npm) git+vue
    Sublime Text 3:3114的安装(目前最新),插件emmet的安装
    opacity在IE6~8下无效果,解决的办法
  • 原文地址:https://www.cnblogs.com/studyplay/p/1994151.html
Copyright © 2020-2023  润新知