12,982
回編集
136行目: | 136行目: | ||
<br> | <br> | ||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
using System; | |||
using System.IO; | |||
using Renci.SshNet; | |||
class SftpDownloadMultipleFiles | |||
{ | { | ||
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(); | |||
} | |||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> |