<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SFTP實現密鑰登陸并上傳文件

      什么是SFTP,公開鍵認證,
      SFTP可不是FTP協議的擴展,他是基于SSH的文件傳輸協議。 而當SFTP服務器登錄有客戶端的公開鍵時,客戶端就可以用自己的私有鍵去跟服務器握手(handshake)已實現登錄而不需要輸入密碼。而這種方式被稱為公開鍵認證。

      1 建SFTP服務器

      首先當然是先建一個local SFTP server ,我使用的是SilverSHielD. 它是非商用的話,免費,當然只能同時又三個連接,下載,安裝。

      2 配置服務器

      打開"SilverSHielD Management Console",然后connect

      Log Path設一下,然后切換到user,追加

      username等等,填好.

      關鍵的在manage User’s Public Keys, 打開, Add

      正規的流程應該是客戶用winscp等工具生成自己的Key-pair,然后把public 可以貼到 actual Public Key, 俺們自己測試用,所以直接Generate,

      然后會提示你保存私有鍵,這是一定要選 OpenSSH Private Key Files ,這個生成的文件就是客戶端認證用私有鍵。

      依次confirm下去,配置完成。

      3 下載訪問SFTP的library

      我用的是 SSH.NET Library

      4,訪問代碼

      A,說不定另一個客戶用的是FTP,做一個通用的接口先:

      public interface IFtpClient
           {
               /// <summary>
               /// 連接服務器
               /// </summary>
               /// <returns>true:成功;false:失敗</returns>
               bool Connect();
               /// <summary>
               /// 斷開連接
               /// </summary>
               void DisConnect();
       
               /// <summary>
               /// 取得文件列表
               /// </summary>
               /// <param name="path">路徑</param>
               /// <returns></returns>
               List<string> ListFiles(string path);
       
               /// <summary>
               /// 下載文件 
               /// </summary>
               /// <param name="remoteFileName">包含全路徑的服務器端文件名</param>
               /// <param name="localFileName">本地保存的文件名</param>
               /// <returns></returns>
               bool Download(string remoteFileName, string localFileName);
       
               /// <summary>
               /// 上傳文件
               /// </summary>
               /// <param name="localFileName">待上傳的文件</param>
               /// <param name="remoteFileName">服務器端文件名</param>
               /// <returns></returns>
               bool Upload(string localFileName, string remoteFileName);
       
               /// <summary>
               /// 文件改名
               /// </summary>
               /// <param name="localFileName">包含全路徑的源文件名</param>
               /// <param name="remoteFileName">包含全路徑的新文件名</param>
               /// <returns></returns>
               bool Rename(string orgFileName, string newFileName);
       
               /// <summary>
               /// 刪除文件
               /// </summary>
               /// <param name="orgFileName"></param>
               /// <param name="newFileName"></param>
               /// <returns></returns>
               bool Delete(string fileName);
           }

      B 定義實現:

      public class SFtpClient : IFtpClient
           {
               SftpClient sftp = null;
       
               /// <summary>
               /// 構造函數
               /// </summary>
               /// <param name="host">sftp服務器名或IP</param>
               /// <param name="port">端口,默認22</param>
               /// <param name="user"></param>
               /// <param name="privateKey"></param>
               /// <param name="passPhrase"></param>
               public SFtpClient(string host, int? port, string user, string privateKey, string passPhrase)
               {
                   PrivateKeyFile keyFile = null;
       
                   if (string.IsNullOrEmpty(passPhrase))
                   {
                       keyFile = new PrivateKeyFile(privateKey);
                   }
                   else
                   {
                       keyFile = new PrivateKeyFile(privateKey, passPhrase);
                   }
       
                   if (port.HasValue)
                   {
                       sftp = new SftpClient(host, port.Value, user, keyFile);
                   }
                   else
                   {
                       sftp = new SftpClient(host, user, keyFile);
                   }
       
       
                   if (sftp != null)
                   {
                       sftp.ConnectionInfo.RetryAttempts = 5;
                       sftp.ConnectionInfo.Timeout = new TimeSpan(0, 3, 0);
                   }
               }
       
               public bool Connect()
               {
                   if (sftp == null)
                   {
                       return false;
                   }
       
                   if (sftp.IsConnected)
                   {
                       return true;
                   }
       
                   try
                   {
                       sftp.Connect();
                       return true;
                   }
                   catch (Exception ex)
                   {
                       string server = string.Format("{0}:{1}", sftp.ConnectionInfo.Username, sftp.ConnectionInfo.Host);
                       // 我用的是nLog來記錄錯誤日志。
                       // logger.Error("[{0}] SFTP連接發生錯誤。", server, ex);
                       return false;
                   }
               }
       
               public void DisConnect()
               {
                   if (sftp == null)
                   {
                       return;
                   }
                   if (!sftp.IsConnected)
                   {
                       return;
                   }
       
                   try
                   {
                       sftp.Disconnect();
                       sftp.Dispose();
                       sftp = null;
                   }
                   catch (Exception ex)
                   {
                       //logger.Error("SFTP斷開連接發生錯誤。", ex);
                   }
               }
       
               /// <summary>
               /// 取得文件列表
               /// </summary>
               /// <param name="path">路徑</param>
               /// <returns></returns>
               public List<string> ListFiles(string path)
               {
       
                   if (!Connect())
                   {
                       return null;
                   }
       
                   List<string> files = new List<string>();
                   try
                   {
                       sftp.ChangeDirectory("/");
                       sftp.ListDirectory(path).ToList().ForEach(f =>
                           {
       
                               files.Add(f.FullName);
                           });
       
                       return files;
                   }
                   catch (Exception ex)
                   {
                       // logger.Error("[{0}] 取得文件列表發生錯誤。", Path, ex);
                       return null;
                   }
               }
       
               /// <summary>
               /// 下載文件 
               /// </summary>
               /// <param name="remoteFileName">包含全路徑的服務器端文件名</param>
               /// <param name="localFileName">本地保存的文件名</param>
               /// <returns></returns>
               public bool Download(string remoteFileName, string localFileName)
               {
                   if (!Connect())
                   {
                       return false;
                   }
       
                   try
                   {
                       sftp.ChangeDirectory("/");
                       FileStream fs = File.OpenWrite(localFileName);
                       sftp.DownloadFile(remoteFileName, fs);
                       fs.Close();
                       return true;
                   }
                   catch (Exception ex)
                   {
                       //logger.Error("[{0}] 文件下載發生錯誤。", remoteFileName, ex);
                       return false;
                   }
               }
       
               /// <summary>
               /// 上傳文件
               /// </summary>
               /// <param name="localFileName">待上傳的文件</param>
               /// <param name="remoteFileName">服務器端文件名</param>
               /// <returns></returns>
               public bool Upload(string localFileName, string remoteFileName)
               {
                   if (!Connect())
                   {
                       return false;
                   }
       
                   try
                   {
                       sftp.ChangeDirectory("/");
       
                       FileStream fs = File.OpenRead(localFileName);
                       sftp.UploadFile(fs, remoteFileName, true);
                       fs.Close();
                       Thread.Sleep(1000);
                       return true;
                   }
                   catch (Exception ex)
                   {
                       //logger.Error("[{0}] 文件上傳發生錯誤。", localFileName, ex);
                       return false;
                   }
               }
       
               /// <summary>
               /// 文件改名
               /// </summary>
               /// <param name="localFileName">包含全路徑的源文件名</param>
               /// <param name="remoteFileName">包含全路徑的新文件名</param>
               /// <returns></returns>
               public bool Rename(string orgFileName, string newFileName)
               {
                   if (!Connect())
                   {
                       return false;
                   }
       
                   try
                   {
                       sftp.ChangeDirectory("/");
       
                       sftp.RenameFile(orgFileName, newFileName);
                       return true;
                   }
                   catch (Exception ex)
                   {
                       //logger.Error("[{0}] 文件改名發生錯誤。", localFileName, ex);
                       return false;
                   }
               }
       
       
               /// <summary>
               /// 刪除文件
               /// </summary>
               /// <param name="orgFileName"></param>
               /// <param name="newFileName"></param>
               /// <returns></returns>
               public bool Delete(string fileName)
               {
                   if (!Connect())
                   {
                       return false;
                   }
       
                   try
                   {
                       sftp.ChangeDirectory("/");
       
                       sftp.DeleteFile(fileName);
                       return true;
                   }
                   catch (Exception ex)
                   {
                       //logger.Error("[{0}] 文件刪除發生錯誤。", localFileName, ex);
                       return false;
                   }
               }
           }

       

      posted @ 2021-09-16 10:53  dexin  閱讀(1816)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日韩精品中文字幕人妻| 日韩人妻精品中文字幕| 人妻中文字幕精品一页| 国产精品午夜无码AV天美传媒| 国产精品成人高潮av| 成人激情视频一区二区三区| 日韩精品自拍偷拍一区二区 | 国产黄色一级片在线观看| 乱人伦人妻中文字幕无码久久网 | 免费无码成人AV片在线 | 亚洲欧洲一区二区三区久久| 国产午夜福利视频合集| 国产JJIZZ女人多水喷水| 尹人香蕉久久99天天拍欧美p7| 亚洲精品一区二区动漫| 韩国福利片在线观看播放| 国产18禁黄网站禁片免费视频| 国产成人毛片无码视频软件| 人妻体内射精一区二区三区| 伊人久久大香线蕉av色婷婷色| 亚洲无人区一码二码三码| 成人乱码一区二区三区四区| 日本午夜精品一区二区三区电影 | 亚洲成A人片在线观看的电影| 国产精品一区二区色综合| 日韩有码中文在线观看| 久久精品手机观看| 亚洲中文久久久精品无码| 国产成年码av片在线观看| 国产精品免费观在线| 亚洲精品成人区在线观看| 国产免费久久精品44| 久久亚洲精品亚洲人av| 国产成人精品无码播放| 四虎影视一区二区精品| 日本高清在线播放一区二区三区| 中国老太婆video| 国产94在线 | 亚洲| 国产午夜福利在线视频| 精品熟女少妇免费久久| 久热久热久热久热久热久热|