MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
C Sharpとネットワーク - SFTPのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
C Sharpとネットワーク - SFTP
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == C# + SSH.NET + SFTPでファイル転送を行う方法を記載する。<br> SSH.NETは、NuGetで入手可能の.NET Framework専用のSSHライブラリである。<br><br> == 処理の流れ == 1. 認証方法のインスタンスを生成する。<br> 公開鍵認証またはパスワード認証を選択する。<br> 公開鍵認証の場合は、ppk形式は指定できない。(例外が発生する)<br> <br> 2. 接続情報のインスタンスを生成する。<br> 生成した認証方法のインスタンスをコンストラクタの引数で渡す。<br> <br> 3. sftpClientのインスタンスを生成する。<br> 接続情報のインスタンスをコンストラクタの引数に渡す。<br> <br> 4. 処理を記述する。(ダウンロード処理やアップロード処理)<br> <br> 下記のサンプルコードでは、公開鍵認証を用いてユーザディレクトリのパスを取得するメソッドSystem.Environment.GetFolderPathを使用しているが、<br> Linuxでも問題なくユーザディレクトリ配下のパスを取得できる。<br><br> == サンプルコード == <syntaxhighlight lang="c#"> using System; using System.IO; using Renci.SshNet; class SFTP { static void Main(string[] args) { // 公開鍵認証の場合 // 例としてユーザディレクトリ配下の.sshディレクトリ内のsecret_key.pemを秘密鍵として使用 string secretKeyPath = Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".ssh", "secret_key.pem"); var authMethod = new PrivateKeyAuthenticationMethod("username", new PrivateKeyFile(secretKeyPath, "finger_print")); // パスワード認証の場合(平文) //var authMethod = new PasswordAuthenticationMethod("username", "password"); // 接続情報のインスタンス生成 var connectionInfo = new ConnectionInfo("IPまたはホスト名", 22, "username", authMethod); using (var client = new SftpClient(connectionInfo)) { // SSH接続を行う client.Connect(); // ユーザディレクトリに移動 client.ChangeDirectory("/home/username"); // test.txtファイルを読み込み専用で開く using (var fs = System.IO.File.OpenRead("test.txt")) { // test.txtファイルをアップロード(trueを指定すると上書き可能となる) client.UploadFile(fs, "test.txt", true); } // SSH接続を切断 client.Disconnect(); // SSH接続を行う client.Connect(); // ユーザディレクトリに移動 client.ChangeDirectory("/home/username"); // test.txtファイルを書き込み専用で開く using (var fs = System.IO.File.OpenWrite("test.txt")) { // test.txtファイルをダウンロード client.DownloadFile("test.txt", fs); } // SSH接続を切断 client.Disconnect(); } } } </syntaxhighlight> <br><br> == 指定したディレクトリ配下のファイルを全てダウンロードする == SSH.NETはディレクトリをダウンロードできないので、ディレクトリ内の全てのファイルのパスを取得して、個別にダウンロードする必要がある。<br> 下記のサンプルコードは、/home/usernameに存在するtestディレクトリ内のファイルを1つずつダウンロードするプログラムである。<br> <br> <syntaxhighlight lang="c#"> client.Connect(); 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); } } client.Disconnect(); </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:C_Sharp]]
C Sharpとネットワーク - SFTP
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse