2016-09-22 6 views
0

문제 : JSCH 라이브러리를 사용하여 SFTP로 원격 사이트를 연결하면 "채널이 열리지 않습니다."라는 결과가 발생합니다. 코드는 한 인터넷 연결에서 정상적으로 작동하지만 다른 인터넷 연결에서는 실패합니다. 다른 것은 프록시를 통해 수행됩니다. 그럼에도 불구하고 FileZilla 클라이언트를 사용하여 다른 SFTP와 연결할 수 있습니다.JSCH 채널이 열리지 않음 (신규)

RESEARCH : 연결 시간 제한이 증가하고 useDNS : false 비슷한 질문을 시도했습니다. 세션과 채널이 준비되어 있습니다. 그래도 시간 초과 후 채널 연결이 실패합니다.

질문 : 연결 방법.

는 다음 코드와 오류 스택 추적 추출물이다 :

JSch jsch = new JSch(); 
    UserInfo userInfo ; 

    jsch.setKnownHosts(KNOWN_HOSTS); 

    session = jsch.getSession(
    Menue.SITE_LOGIN, 
    Menue.SITE_HOST, 
    Menue.SITE_PORT); 

    session.setPassword(
    Menue.SITE_PASSWORD); 

    if (Menue.USE_PROXY) { 
    session.setProxy(
     new ProxyHTTP(
     Menue.PROXY_HOST, 
     Menue.PROXY_PORT)); 
    } 

    session.setConfig(
    "StrictHostKeyChecking", 
    "yes"); 

    session.connect(); 
    channel = session.openChannel("sftp"); 
    channel.setInputStream(System.in); 
    channel.setOutputStream(System.out); 
    channel.connect(60 * 1000); // Error: channel is not opened. 

스택 트레이스 :

com.jcraft.jsch.JSchException : 채널이 열리지 않습니다. com.jcraft.jsch.Channel.connect (Channel.java:151)에서 com.jcraft.jsch.Channel.sendChannelOpen (Channel.java:765)

+0

[Channel.java 라인 765 (HTTP ://grepcode.com/file/repo1.maven.org/mav jsch/Channel.java? av = f # 765)는 5 초 제한 시간이 너무 짧기 때문에 실패하고 있음을 나타냅니다. 그 문제를 해결하는 것이 확실해 보입니다. 타임 아웃을 늘리려고 시도했지만 다른 방법으로는 실패합니다. 그러나 우리는 귀하가 귀하의 질문에 제시하는 문제에 대해서만 당신을 도울 수 있습니다. – Kenster

+0

60 초로 변경되었습니다. 같은 결과. 그것은 다른 사무실에서 전혀 시간 초과없이 잘 작동합니다. – Zon

+0

60 초 동안 서버에서 어떤 일이 발생했는지 조사 할 수 있습니까? 예를 들어 서버가 OpenSSH이면 sftp 채널 요청을 처리하기 위해 [sftp-server] (http://man.openbsd.org/sftp-server) 프로그램의 인스턴스를 시작해야합니다. 또한 ssh 서버는 여러 가지 방법으로 특정 연결을 처리하도록 설정할 수 있습니다. 또는 사용자의 .bashrc 또는 서버의 유사한 파일이 sftp-server 프로그램 시작을 방해 할 수 있습니다. – Kenster

답변

0
실수의 출력이 아닌 유익했다

에서 (뿐만 아니라 도서관의 부족한 문서). 그 이유는 연결시 서버 rsa-keys를 관리하기 위해서였습니다. 내가 원했던 및 전체 자동화 (UserInfo가 비활성화 됨)가 없습니다.

또한 StrickedHostKeyChecking은 안전하지 않지만이어야합니다. 이 값을 "no"로 설정하면 rsa-keys를 로컬 키 저장소에 자동로드 할 수 있습니다 (예 : ~/.ssh/known_hosts).

try { 
    JSch jsch = new JSch(); 

    jsch.setKnownHosts("~/.ssh/known_hosts"); 

    Session session = jsch.getSession(
    "my_login", 
    "my.host", 
    22); 

    session.setPassword(
    "password"); 

    // Autoadd system rsa-keys to system file like known_hosts by 
    // disabling strick keys checking: 
    java.util.Properties config = new java.util.Properties(); 
    config.put(
    "StrictHostKeyChecking", 
    "no"); 
    session.setConfig(config); 

    session.connect(); 

    Channel channel = session.openChannel("sftp"); 
    channel.connect(); 
    ChannelSftp sftpChannel = (ChannelSftp) channel; 

    System.out.println(
     sftpChannel.ls("/")); 

    session.disconnect(); 
} catch (Exception e) { 
    System.out.println(e); 
} 

이 기사는 도움 :

마지막으로 코드의 결과

Original example on KnownHosts

Adding rsa to known_hosts

Unknown hostkey management