2014-09-29 3 views
4

sftp 서버에 연결하려고하는데 예외 나 시간 초과가 없으므로 메모리 사용량 만 증가합니다.sftp 서버에 연결하려고 시도 할 때 메시지 또는 시간 초과가 발생하지 않습니다.

나는 도서관 EnterpriseDT.Net.Ftp을 사용하고

내 코드는 다음과 같다 :

XmlConfigurator.Configure(); 
     Module1.Logger = LogManager.GetLogger("SftpTester"); 
     try 
     { 
     Module1.Logger.Info((object) "[EnterpriseDT] - Start"); 
     Uri uri1 = new Uri("ftp://*****"); 
     // ISSUE: explicit reference operation 
     // ISSUE: variable of a reference type 
     Uri& uri2 = @uri1; 
     int port = ****; 
     string str1 = "******"; 
     // ISSUE: explicit reference operation 
     // ISSUE: variable of a reference type 
     string& UserName = @str1; 
     string str2 = "*******"; 
     // ISSUE: explicit reference operation 
     // ISSUE: variable of a reference type 
     string& Password = @str2; 
     SecureFTPConnection secureFtpConnection = Module1.InitConnection(uri2, port, UserName, Password); 
     Module1.Logger.Info((object) "Connecting to ftp..."); 
     secureFtpConnection.Connect(); 
     Module1.Logger.Info((object) "Connection Successful!!!"); 
     try 
     { 
      Module1.Logger.Info((object) "Disposing connection..."); 
      secureFtpConnection.Dispose(); 
     } 
     catch (Exception ex) 
     { 
      ProjectData.SetProjectError(ex); 
      ProjectData.ClearProjectError(); 
     } 
     Module1.Logger.Info((object) "Connection Disposed."); 
     } 
     catch (Exception ex) 
     { 
     ProjectData.SetProjectError(ex); 
     Exception exception = ex; 
     Module1.Logger.Error((object) ("Main() - " + exception.Message)); 
     Module1.Logger.Error((object) ("StackTrace: " + exception.StackTrace)); 
     if (exception.InnerException != null) 
      Module1.Logger.Error((object) ("InnerException: " + exception.InnerException.Message)); 
     ProjectData.ClearProjectError(); 
     } 
     finally 
     { 
     Module1.Logger.Info((object) "[EnterpriseDT] - End"); 
     } 

    private static SecureFTPConnection InitConnection(ref Uri uri, int port, ref string UserName = "", ref string Password = "") 
    { 
     Module1.Logger.Info((object) "InitConnection() - Setting Up Connection"); 
     SecureFTPConnection secureFtpConnection = new SecureFTPConnection(); 
     secureFtpConnection.LicenseOwner = "*******"; 
     secureFtpConnection.LicenseKey = "***********"; 
     secureFtpConnection.ServerAddress = uri.Host; 
     Module1.Logger.Info((object) ("\tHost: " + uri.Host)); 
     secureFtpConnection.UserName = UserName; 
     Module1.Logger.Info((object) ("\tUsername: " + UserName)); 
     secureFtpConnection.Protocol = FileTransferProtocol.SFTP; 
     Module1.Logger.Info((object) ("\tProtocol: " + FileTransferProtocol.SFTP.ToString())); 
     secureFtpConnection.ServerValidation = SecureFTPServerValidationType.None; 
     Module1.Logger.Info((object) ("\tServerValidation: " + SecureFTPServerValidationType.None.ToString())); 
     secureFtpConnection.AuthenticationMethod = AuthenticationType.Password; 
     Module1.Logger.Info((object) ("\tAuthenticationMethod: " + AuthenticationType.Password.ToString())); 
     if (port > 0) 
     { 
     secureFtpConnection.ServerPort = port; 
     Module1.Logger.Info((object) ("\tServerPort: " + port.ToString())); 
     } 
     secureFtpConnection.Password = Password; 
     Module1.Logger.Info((object) ("\tPassword: " + Password)); 
     return secureFtpConnection; 
    } 

로그 메시지 :

2014-09-27 04:50:22,783 [1] - [SftpTester] [EnterpriseDT] - Start 
2014-09-27 04:50:22,799 [1] - [SftpTester] InitConnection() - Setting Up Connection 
2014-09-27 04:50:22,971 [1] - [SftpTester] Host: ******* 
2014-09-27 04:50:22,971 [1] - [SftpTester] Username: ***** 
2014-09-27 04:50:22,971 [1] - [SftpTester] Protocol: SFTP 
2014-09-27 04:50:22,971 [1] - [SftpTester] ServerValidation: None 
2014-09-27 04:50:22,971 [1] - [SftpTester] AuthenticationMethod: Password 
2014-09-27 04:50:22,971 [1] - [SftpTester] ServerPort: **** 
2014-09-27 04:50:22,971 [1] - [SftpTester] Password: ****** 
2014-09-27 04:50:22,971 [1] - [SftpTester] Connecting to ftp... 

어떤 생각이 시간 초과 오류가있는 경우 또는 내가 블랙리스트에 있다면? 서버에 대한

업데이트 2014년 7월 10일

순서 :

  1. 암호 인증
  2. 패킷
  3. 패킷 대기는
  4. 인증 부분적인 성공을 도착했다. 시도 : 암호, 공개 키, 키보드 형
  5. 키보드 대화 형 인증
  6. 패킷
  7. 패킷 도착
  8. 프롬프트를 기다리는 중 : 패킷
  9. 패킷 도착
  10. 인증 부분적인 성공을 위해 대기
  11. : 비밀번호 . 시도 : 암호, 공개 키를 키보드 상호 작용 패킷을 기다리는
  12. 패킷 도착
  13. 프롬프트 : 비밀번호 :
  14. 루프

    업데이트 갱신

(9 ~ 15) 라이브러리 문제를 해결, 버그였다.

버전 8.6.1 (2014년 9월 23일) 인증 시도의 루프 발생
고정 KBI 재진입 버그. 존재하지 않는 디렉토리에 파일을 업로드 할 때 예외가 발생하지 않는 SFTP 버그가 수정되었습니다. OpenVMS SFTP 서버가 SSH로 인식되지 않는 SFTP 문제가 수정되었습니다. 단 하나의 재 연결 만 이루어진 재 시도 다운로드 문제가 수정되었습니다. FTPS를 사용하는 일부 2012 R2 시스템에서 "보호 된 메모리를 읽거나 쓰려고했습니다."문제가 수정되었습니다.

+0

라이브러리 문제인지 궁금합니다. FileZilla와 같은 FTP 클라이언트를 통해 동일한 서버에 연결을 시도 했습니까? diff 라이브러리를 사용해 보셨습니까? 이게 효과가 있습니까? –

+0

프로덕션 서버이고 직접 액세스 할 수 없기 때문에 ftp 클라이언트로 테스트 할 수 없습니다. 그리고 나는이 현재 라이브러리의 문제점을 bussines의 요구 사항으로 검토해야합니다. –

+1

EnterpriseDT.Net.Ftp는 FTP 클라이언트이므로, 다른 FTP 클라이언트를 사용하여 위에 사용 된 코드/라이브러리 (imho가 잘 보이는)와 관련된 문제가 있음을 배제합니다. 다른 FTP 클라이언트가 작동하면 위의 코드에 문제가 있습니다. 다른 클라이언트가 작동하지 않으면 아마도 방화벽 또는 FTP 서버 구성 문제 일 수 있습니다. –

답변

1

코드는 정상적으로 보입니다. 특별한 것은 없습니다. 가장 먼저해야 할 일은 FTP 코드의 실행에 대한 충분한 정보가 없으므로 라이브러리에서 디버그 로깅을 활성화하는 것입니다.

다음 문을 디버그를 활성화 할 수 있습니다 : 기본적으로

EnterpriseDT.Util.Debug.Logger.CurrentLevel = EnterpriseDT.Util.Debug.Level.DEBUG; 

는 콘솔에 디버그 정보를 인쇄합니다. 원하는 경우 사용자 정의 appender (파일, db 등)를 사용할 수 있습니다. 디버그 정보를 통해 문제에 대한 더 많은 정보를 얻을 수 있습니다.

시간 초과 오류는 어떤 생각입니까?

나는 그렇게 생각하지 않는다. 기본적으로 라이브러리에 120000ms로 설정된 클라이언트 시간 초과가 있습니다. 서버 시간 초과는 아마도 훨씬 더 높습니다. 시간 초과 문제라고 생각하지 않습니다.

블랙리스트에 있습니까?

FTP 클라이언트를 정지시키지 않아도됩니다.

메시지 또는 시간 초과가 발생하는 이유는 무엇입니까?

부적절한 FTP 서버 또는 방화벽 구성으로 인해 중단 될 수 있습니다. EnterpriseDT.Net.Ftp는 대부분의 FTP 클라이언트와 마찬가지로 기본적으로 FTP 수동 모드를 사용합니다. FTP 서버 및 방화벽 구성을 확인하고 모든 항목이 수동 모드로 올바르게 구성되어 있는지 확인하는 것이 좋습니다.

FTP 서버가 올바르게 구성되어 있으면 FTP 클라이언트에서 FTP 서버에 연결할 수 있어야합니다. 서버가 올바르게 설정되었는지 확인하기 위해 FileZilla 또는 다른 클라이언트를 사용해 볼 수 있습니다. 그렇게하면 방화벽이나 FTP 서버 문제를 배제 할 수 있습니다.

업데이트 : 우리가가가 인증 문제입니다 로그 지금까지 무엇을보고에서

. SSH 서버가 password, publickey 및 keyboard-interactive auth를 지원하는 것처럼 보입니다.

로그의 나의 해석은 위의 SFTP 클라이언트가이 정확한 순서로 다음 방법으로 인증을 시도된다는 점이다 :

Try: password, publickey, keyboard-interactive 

암호 인증 (코드에서 기본) 통과하지 않습니다 (잘못된 암호입니까?) 그리고 클라이언트가 키보드 인증으로 전환하면 SSH에서 암호를 묻는 이유가 생기며 프롬프트 응답을 포함하지 않기 때문에 SFTP 라이브러리는이 시나리오를 처리 할 수 ​​없습니다.

는 라이브러리에있는 SSHAuthPrompt 클래스를 확인해야한다는 고정하고 SecureFTPConnection 클래스에 KBIPrompts 속성을 사용하여 코드의 암호를 사용하여 프롬프트 응답을 포함합니다 :

http://www.enterprisedt.com/products/edtftpnetpro/doc/manual/api/html/T_EnterpriseDT_Net_Ftp_Ssh_SSHAuthPrompt.htm

이를 클래스에는 생성자에 두 개의 매개 변수가 있습니다. 프롬프트는 KBI에서 가져온 것과 일치해야하며 그 값은 'Password:'이어야하며 응답 값은 암호 여야합니다.

또한 AuthenticationMode를 KeyboardInteractive로 구성해야합니다.

+0

지금 당장 문제가 무엇인지, 다른 라이브러리를 사용해도 서버에 연결할 수 있는지, 그리고 파일 길라를 시도해 볼 수는 있지만 문제가 필요하다면 이제는 그 문제를 해결할 수 있습니다. 서버, 8 시간이 지난 후에는 서버가 중단됩니다. –

+1

내가 제안한 것처럼 디버깅 활성화를 시도 했습니까? 디버그 출력을 공유하여 문제에 대한 자세한 정보를 얻을 수 있습니까? –

+0

예이 매개 변수를 활성화했지만 결과를 얻으려면 토요일까지 기다려야합니다. –