SFTP с .NET 3.5 - PullRequest
       81

SFTP с .NET 3.5

3 голосов
/ 30 апреля 2010

Мне нужно подключиться к SFTP-серверу для загрузки и выгрузки файлов с использованием C # /. NET 3.5.

Предоставляет ли платформа .NET 3.5 какие-либо встроенные инструменты / механизмы / библиотеки для подключения к SFTP-серверу для загрузки и выгрузки файлов?

Ответы [ 7 ]

4 голосов
/ 30 апреля 2010

Есть коммерческие решения:

... и бесплатно:

У меня лично нет опыта ни с одним из них.

3 голосов
/ 29 июня 2017

Нет поддержки SFTP в .NET Framework, ни в одной версии.


Ответ Sanj показывает, как использовать WinSCP , запустив консольное приложение. Хотя это действительно возможно, где на самом деле сборка WinSCP .NET , которая делает это для разработчика, предоставляя ему / ее собственный интерфейс .NET для сценариев WinSCP.

Существует даже пакет WinSCP NuGet .

Пример тривиальной загрузки SFTP на C #:

// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Sftp,
    HostName = "example.com",
    UserName = "user",
    Password = "mypassword",
    SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
};

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Upload files
    session.PutFiles(@"d:\toupload\*", "/home/user/").Check();
}

И то же самое для VB.NET:

.
' Setup session options
Dim sessionOptions As New SessionOptions
With sessionOptions
    .Protocol = Protocol.Sftp
    .HostName = "example.com"
    .UserName = "user"
    .Password = "mypassword"
    .SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
End With

Using session As New Session
    ' Connect
    session.Open(sessionOptions)

    ' Upload files
    session.PutFiles("d:\toupload\*", "/home/user/").Check()
End Using

Есть много других примеров на обоих языках (и более).


Вы можете иметь WinSCP GUI для генерации шаблона кода SFTP , как описано выше, для вас, включая C #, VB.NET и PowerShell.

enter image description here


Как уже упоминалось выше, сборка - это просто оболочка для сценариев WinSCP, поэтому она не является полностью нативным .NET-кодом. Как таковой, он не подходит для всех вариантов использования в .NET Framework. Он в основном подходит для автоматизации задач, а не для разработки графического интерфейса или веб-приложений.

Для полностью нативной библиотеки .NET SFTP см. SSH.NET , что, как ни странно, пока не упоминается ни в одном ответе.

(я автор WinSCP)

1 голос
/ 21 февраля 2016

Я предпочитаю WinSCP. Это бесплатно, и я пробовал раньше, он отлично работает. Если вы скачали COM-файл и могли бы сделать что-то вроде ниже: ПРИМЕЧАНИЕ: я передаю параметры из ini.

  const string logname = "log.xml";
            string username = ini.IniReadValue("sftp", "Username");
            string password = ini.IniReadValue("sftp", "Password");
            string remotehost = ini.IniReadValue("sftp", "Remote Host");
            string dloadpath = ini.IniReadValue("Download", "Local Path");

            Process winscp = new Process();
            winscp.StartInfo.FileName = @ini.IniReadValue("winscp", "compath");
            winscp.StartInfo.Arguments = "/log=" + logname;
            winscp.StartInfo.UseShellExecute = false;
            winscp.StartInfo.RedirectStandardInput = true;
            winscp.StartInfo.RedirectStandardOutput = true;
            winscp.StartInfo.CreateNoWindow = true;

            try
            {
                winscp.Start();
                lblconfirm.Text = "Status: WinSCP Started Successfully";
            }
            catch (Exception ex)
            {

                writeLog("from PutSFTP:  Could not run the WinSCP executable " + winscp.StartInfo.FileName + Environment.NewLine + ex.Message);
            }


            winscp.StandardInput.WriteLine("option batch abort");
            winscp.StandardInput.WriteLine("option confirm off");
            winscp.StandardInput.WriteLine("open sftp://" + username + ":" + password + "@" + remotehost);
            winscp.StandardInput.WriteLine("cd " + ini.IniReadValue("Download", "Remote Path"));
            winscp.StandardInput.WriteLine(@"get " + "/" + ini.IniReadValue("Download", "Remote Path") + "/*" + ini.IniReadValue("Download", "FileType") + " " + ini.IniReadValue("Download", "Local Path"));
            winscp.StandardInput.Close();

            string output = winscp.StandardOutput.ReadToEnd();
            lblconfirm.Text = "Download Success! Check logs for moe info";

            winscp.WaitForExit();
1 голос
/ 30 апреля 2010

Нет, .NET не поставляется с библиотеками SFTP. Тем не менее, WinSCP - это бесплатная утилита, которую вы можете скачать. Я использовал его раньше, чтобы загрузить информацию с сервера отчетов PayPal.

Он имеет хорошую настройку командной строки для автоматизации загрузки / выгрузки файлов. Поэтому из моего приложения .NET вы просто вызываете процесс с конкретными аргументами и ждете, пока он не завершится.

0 голосов
/ 19 июля 2012

IIS 7.x (который поставляется с Windows Server 2008 или Windows 7) поддерживает только FTPs , а не sFTP изначально ( пояснение см. в обновлении ниже) - однако существуют серверные решения, такие как , это , доступное для протокола sFTP.

Если вам требуется sFTP-клиент , Microsoft пока не оказывает никакой поддержки. Но я очень хорошо поработал со сторонним компонентом .NET с именем wodSFTP.NET, который является клиентом sFTP.

Здесь вы можете найти продукт и документацию: wodSFTP.NET . Примеры и онлайн-документация могут быть загружены бесплатно или без регистрации.

Обратите внимание, что вы можете выбрать, покупаете ли вы версию без или с исходным кодом в C #. У них также есть компонент SSH. Примеры всегда доступны (независимо от выбранной версии) в C # и VB.NET.

Пример (с веб-сайта www.weonlydo.com, преобразован в C #):

var wodSFTP1 = new WeOnlyDo.Client.SFTP();

// Authenticate with server using hostname, login, password.
wodSFTP1.Hostname = "your_hostname";
wodSFTP1.Login = "your_login";
wodSFTP1.Password = "your_password";
wodSFTP1.Blocking = True;  // Use synchronous connections
wodSFTP1.Connect();

wodSFTP1.GetFile("c:\", "/home/somepath/somefile.txt");

В этом примере используется блокирующий (синхронный) режим. Обратите внимание, что вы также можете использовать компонент асинхронно - в этом случае события будут запускаться, и вы можете написать обработчики событий, чтобы реагировать на них.

Обратите внимание, что в этом примере не используется ключ для аутентификации, но, конечно, это также поддерживается (вы можете использовать аутентификацию на основе ключей, аутентификацию на основе паролей или и то, и другое).


Обновление: FTPs и sFTP - это разные протоколы. Пожалуйста, перейдите по ссылкам для объяснения.

0 голосов
/ 24 августа 2010

Поскольку встроенной поддержки нет, вы можете искать в Google другие коммерческие компоненты, просто наберите что-то вроде «Компоненты SFTP .NET»

0 голосов
/ 30 апреля 2010

Фреймворк не обеспечивает поддержку SFTP.

...