FTP를 통해 SharpSsh를 연결할 수 없습니다
문제
Sharpssh를 사용하여 안전한 FTP 연결을 만드는 데 어려움이 있습니다. 지금까지 나는 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 연결이 필요하므로 .NET 클래스는 옵션이 아닙니다. 나는 Sharpssh에 대한 대안이 존재한다면 기꺼이 시도 할 의향이 있습니다.
해결책
SSH 라이브러리 인 Tamir.sharpssh를 사용하고 있습니다. 그러나 FTPS (또는 FTP/SSL) 서버에 연결하는 것처럼 보입니다. FTP는 완전히 다른 프로토콜이며 SFTP 나 SSH와 공통적 인 것이 없습니다.
당사 웹 사이트의 다음 페이지는 FTP, FTP/SSL, FTPS 및 SFTP 프로토콜의 차이점에 대해 설명합니다. Rebex.net/secure-ftp.net/.
간단한 요약은 다음과 같습니다.
FTP 일반, 구식, 불안한 파일 전송 프로토콜. 네트워크를 통해 클리어 텍스트 비밀번호를 전송합니다.
FTPS -FTP TLS/SSL 암호화 채널을 통한 FTP. FTP 및 FTPS 관계는 HTTP 및 HTTPS와 유사합니다.
FTP/SSL- FTPS와 동일합니다
SFTP -SSH 파일 전송 프로토콜. FTP에 공통적 인 것이 없습니다 (이름을 기대). SSH 암호화 된 통신 채널을 통해 실행됩니다.
Secure 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, .NET에서 FTP (및 SFTP)를 완전히 지원하는 안정되고 성숙한 라이브러리.
연결을위한 몇 가지 샘플 코드는 다음과 같습니다.
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();