0

C# で、あるリモート サーバーから別のリモート サーバーに大きなファイル (20GB 以上) をダウンロードする必要があります。他のファイル操作については、すでに ssh 接続を確立しています。バイナリ モードで ssh セッションから ftp ダウンロードを開始する必要があります (これは、特定の形式でファイルを配信するためのリモート サーバーの要件です)。質問 - ssh セッションで ftp コマンドを送信して資格情報に接続し、モードを「bin」に設定するにはどうすればよいですか? 基本的に、ssh を使用して次のことと同等です。

FtpWebRequest request =(FtpWebRequest)WebRequest.Create(
        @"ftp://xxx.xxx.xxx.xxx/someDirectory/someFile");

request.Credentials = new NetworkCredential("username", "password");
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.DownloadFile;

FtpWebResponse response = (FtpWebResponse)request.GetResponse();
4

2 に答える 2

1

SSH は「Secure SHell」です。これは、実行するコマンドを指定するという点で、cmd プロンプトに似ています。FTPではありません。SSH は、FTP ユーティリティまたはアプリケーションを実行できます。

SSH には SFTP (または SSH ファイル転送プロトコル) と呼ばれるものがありますが、それを行うために .NET (つまり BCL) には何も組み込まれていません。 FtpWebRequestSFTP をサポートしていません。

「FTP」を共有しているにもかかわらず、それらは異なるプロトコルであり、互いに互換性がありません。

FTP ダウンロードを開始したい場合は、何らかのユーティリティを実行するよう SSH に指示する必要があります。SFTP 転送を開始する場合は、sftp コマンドを発行できます。ただし、もう一方の端は sftp をサポートする必要があります。または、scp コマンド (セキュア コピー) を発行します。しかし、繰り返しになりますが、相手側はそのプロトコルをサポートする必要があります (SFTP や FTP とは異なります)...

もう一方の端を書きたい場合は、SFTP または SCP を実行するサードパーティのライブラリを見つける必要があります...

于 2012-07-31T17:35:25.033 に答える
0

あなたが必要とするものを達成するための私のお気に入りのlibはChilkatSoftのChilkatです(免責事項:私は会社に所属していない単なる有料ユーザーです)。

Chilkat.SFtp sftp = new Chilkat.SFtp();

//  Any string automatically begins a fully-functional 30-day trial.
bool success;
success = sftp.UnlockComponent("Anything for 30-day trial");
if (success != true) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}

//  Set some timeouts, in milliseconds:
sftp.ConnectTimeoutMs = 5000;
sftp.IdleTimeoutMs = 10000;

//  Connect to the SSH server.
//  The standard SSH port = 22
//  The hostname may be a hostname or IP address.
int port;
string hostname;
hostname = "www.my-ssh-server.com";
port = 22;
success = sftp.Connect(hostname,port);
if (success != true) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}

//  Authenticate with the SSH server.  Chilkat SFTP supports
//  both password-based authenication as well as public-key
//  authentication.  This example uses password authenication.
success = sftp.AuthenticatePw("myLogin","myPassword");
if (success != true) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}

//  After authenticating, the SFTP subsystem must be initialized:
success = sftp.InitializeSftp();
if (success != true) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}

//  Open a file on the server:
string handle;
handle = sftp.OpenFile("hamlet.xml","readOnly","openExisting");
if (handle == null ) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}

//  Download the file:
success = sftp.DownloadFile(handle,"c:/temp/hamlet.xml");
if (success != true) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}

//  Close the file.
success = sftp.CloseHandle(handle);
if (success != true) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}
于 2012-07-31T23:25:15.510 に答える