Не удается заставить SharpSSH подключиться через FTP
Вопрос
У меня возникли проблемы с установлением безопасного FTP-соединения с помощью SharpSSH.До сих пор я свободно использовал приложение командной строки DOS MOVEit для установления соединения, и оно подключается нормально:
C:\> ftps -user:ABC -password:123 xxx.xxx.xxx.mil
Однако, когда я пытаюсь сделать то же самое с SharpSSH, я получаю сообщение об ошибке, в котором говорится, что либо время ожидания соединения истекло, либо сервер ответил неправильно:
Dim sftp = New Tamir.SharpSsh.Sftp("xxx.xxx.xxx.mil", "ABC", "123")
sftp.Connect()
или
Dim host = New Tamir.SharpSsh.SshStream("xxx.xxx.xxx.mil", "ABC", "123")
Есть какие-нибудь идеи, что я, возможно, делаю не так, или как я мог бы выяснить, что терпит неудачу?
Обратите внимание, что мне нужно безопасное FTP-соединение, поэтому .СЕТЕВЫЕ классы - это не вариант.Однако я готов попробовать альтернативы SharpSSH, если они существуют.
Решение
вы используете Tamir.SharpSSH, который является библиотекой SSH.Однако, похоже, что вы подключаетесь к серверу FTPS (или FTP / SSL).FTPS - это совершенно другой протокол и не имеет ничего общего ни с SFTP, ни с SSH.
На следующей странице нашего веб-сайта обсуждаются различия между протоколами FTP, FTP/ SSL, FTPS и SFTP: rebex.net/secure-ftp.net/.
Ниже приводится краткое резюме:
FTP простой, старый, небезопасный протокол передачи файлов.Передает пароль в виде открытого текста по сети.
FTPS - FTP через зашифрованный TLS/SSL канал.Отношение FTP и FTPS аналогично HTTP и HTTPS.
FTP / SSL - то же, что и FTPS
SFTP - протокол передачи файлов SSH.Не имеет ничего общего с FTP (ожидайте название).Работает по зашифрованному каналу связи SSH.
Безопасный FTP - может быть либо SFTP, либо FTPS :-(
Вы можете попробовать Пакет для передачи файлов Rebex компонент, который поддерживает как SFTP, так и FTPS протоколы (но это стоит некоторых денег в отличие от SharpSSH).
Подключение к FTP / SSL-серверу будет выглядеть следующим образом:
' Create an instance of the Ftp class.
Dim ftp As New Ftp()
' Connect securely using explicit SSL.
' Use the third argument to specify additional SSL parameters.
ftp.Connect(hostname, 21, Nothing, FtpSecurity.Explicit)
' Connection is protected now, we can log in safely.
ftp.Login(username, password)
Другие советы
Другой отличной альтернативой (тоже не бесплатной) является edtFTPnet/PRO, стабильная, зрелая библиотека, которая предлагает полную поддержку FTPS (и SFTP) в .NET.
Вот несколько примеров кода для подключения:
SecureFTPConnection ftpConnection = new SecureFTPConnection();
// setting server address and credentials
ftpConnection.ServerAddress = "xxx.xxx.xxx.mil";
ftpConnection.UserName = "ABC";
ftpConnection.Password = "123";
// select explicit FTPS
ftpConnection.Protocol = FileTransferProtocol.FTPSExplicit;
// switch off server validation (only do this when testing)
ftpConnection.ServerValidation = SecureFTPServerValidationType.None;
// connect to server
ftpConnection.Connect();