2012-10-24 3 views
3

원격 Windows SFTP 서버에서 Linux로 파일을 검색하기 위해 JSch를 구현하려고합니다.JSch에서 SFTP를 수행 할 때 보안 채널에 연결할 수 없습니다.

Session session = null; 
    Channel channel = null; 
    ChannelSftp channelSftp = null; 
     try{ 
      JSch jsch = new JSch(); 
      session = jsch.getSession("userName","hostName",22); 
      session.setPassword("password"); 
      java.util.Properties config = new java.util.Properties(); 
      config.put("StrictHostKeyChecking", "no"); 
      session.setConfig(config); 
      session.connect(); 
      System.out.println(session.sendKeepAliveMsg()); 
      channel = session.openChannel("sftp"); 
      channel.connect(); 
     }catch(Exception e){ 
       e.printstacktrace(); 
     } 

이 코드를 실행하는 중 다음 예외가 발생합니다.

com.jcraft.jsch.JSchException: java.io.IOException: inputstream is closed 
    at com.jcraft.jsch.ChannelSftp.start(ChannelSftp.java:288) 
    at com.jcraft.jsch.Channel.connect(Channel.java:152) 

나는 내가 찾은 디버깅 할 때 :

start(); 

방법 채널 클래스에 예외를 던지고있다. 어쨌든 내가 이것을 막을 수 있습니까? 왜 아무 것도하지 않고 그 방법이 거기에 있다는 것을 나는 이해하지 못한다.

답변

2

시도는 연결하기 전에 ChannelSft으로 채널을 변환하려면 :

Channel channel = session.openChannel("sftp"); 
ChannelSftp channelSftp = (ChannelSftp) channel; 
channelSftp.connect(); 
+0

이봐, 내가 고정으로 표시하는 사과 ...... 나는 오래 전에 그것을 해결 ... 감사 – mdp

+0

비록 대답 없음 문제;)! – Maxbester

+0

같은 문제가 있습니다. 2 가지 측면에서 조사를했습니다. 1. 예외의 발생과 마찬가지로, meawhile 나는 내 응용 프로그램이 Reset flat set (아마도 세션에서 약간의 문제가 있음을 나타냄)으로 TCP 패킷을 보냈다는 것을 알았습니다. 2. 응용 프로그램이 구현 된 것은 위의 증상과 똑같습니다. 의심 스럽지만 예외 스택 추적 측면에서 ChannelSftp의 start() 메서드가 결국 호출되었으므로 connect() 메서드를 호출하기 전에 채널 개체를 ChannelSftp로 캐스팅해야하는 정확한 이유는 무엇입니까? 어떤 힌트를 주셔서 감사합니다 –

관련 문제