「C Sharpとネットワーク - SFTP」の版間の差分

ナビゲーションに移動 検索に移動
 
136行目: 136行目:
<br>
<br>
  <syntaxhighlight lang="c#">
  <syntaxhighlight lang="c#">
  // ...略
  using System;
using System.IO;
using Renci.SshNet;
   
   
  client.Connect();
  class SftpDownloadMultipleFiles
var files = client.ListDirectory("/home/username/test").Where(x => x.Name != "." && x.Name != "..");
foreach (var file in files)
  {
  {
     using (var fs = System.IO.File.OpenWrite(file.Name))
     static void Main(string[] args)
     {
     {
       client.DownloadFile(file.FullName, fs);
       // 公開鍵認証の場合
      // 例としてユーザディレクトリ配下の.sshディレクトリ内のsecret_key.pemを秘密鍵として使用
      string secretKeyPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".ssh", "secret_key.pem");
      var authMethod = new PrivateKeyAuthenticationMethod("username", new PrivateKeyFile(secretKeyPath, "finger_print"));
      // 公開鍵にパスフレーズが存在する場合
      var authMethod = new PrivateKeyAuthenticationMethod("<リモートPCのユーザ名>",
                                                          new PrivateKeyFile(secretKeyPath, "<パスフレーズ>"));
      // 公開鍵にパスフレーズが無い場合
      //var authMethod = new PrivateKeyAuthenticationMethod("<リモートPCのユーザ名>",
      //                                                    new PrivateKeyFile(secretKeyPath, ""));
      // パスワード認証の場合
      //var authMethod = new PasswordAuthenticationMethod("<リモートPCのユーザ名>",
      //                                                  "<リモートPCのユーザ名のパスワード>")
      // 接続情報のインスタンス生成
      var connectionInfo = new ConnectionInfo("<リモートPCのIPアドレス または ホスト名>",
                                              <ポート番号  例: 22>,
                                              "<リモートPCのユーザ名>",
                                              authMethod);
      using (var client = new SftpClient(connectionInfo))
      {
          // SSH接続を行う
          client.Connect();
          // リモートPCのユーザディレクトリに移動して、
          // 任意のディレクトリ (ここでは、/home/username/testディレクトリ) にある全てのファイルをダウンロードする
          var files = client.ListDirectory("/home/username/test").Where(x => x.Name != "." && x.Name != "..");
          foreach (var file in files)
          {
            // ファイル群を個別に書き込み専用で開く
            using (var fs = System.IO.File.OpenWrite(file.Name))
            {
                // ファイル群を個別にダウンロード
                client.DownloadFile(file.FullName, fs);
            }
          }
          // SSH接続を切断
          client.Disconnect();
      }
     }
     }
  }
  }
client.Disconnect();
// ...略
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>

案内メニュー