2015-11-24 18 views
7

'da bir kanalı açarken kanal açılmıyor jsch sürüm 0.1.51'i kullanarak uzak bir ana bilgisayara bağlanırken, numaralı telefondan Channel.connect() numaralı telefonu arayarak aşağıdaki istisnalar meydana gelir.com.jcraft.jsch.JSchException: jsch

ChannelExec channel = (ChannelExec) session.openChannel("exec"); 
channel.setCommand("echo hello"); 
channel.connect(); // Error here 

Channel.connect() görüşmesi genellikle 100 ms altında döndürür, ancak bu hata ocurrs zaman çağrı önce 20 saniyeden fazla için asılı:

com.jcraft.jsch.JSchException: channel is not opened. 
    at com.jcraft.jsch.Channel.sendChannelOpen(Channel.java:765) 
    at com.jcraft.jsch.Channel.connect(Channel.java:151) 
    at com.jcraft.jsch.Channel.connect(Channel.java:145) 

biz oluşturulduktan oturumdan sonra kullanmak koddur istisna atıyor.

cevap

12

İstisna mesajı biraz yanıltıcıdır. Hata, sunucudan SSH_MSG_CHANNEL_OPEN_CONFIRMATION iletisini bekleyen bir zaman aşımı olduğunda ortaya çıkabilir. Jsch'deki varsayılan zaman aşımı (sürüm 0.1.51) 20 saniyedir. Aynı hatanın meydana geldiği ancak daha fazla araştırılmadığım başka durumlar olduğunu düşünüyorum.

Muhtemelen zaman aşımı için çeşitli nedenler olsa da, ara sıra uzun bir zaman süren OpenSSH'den gelen sshd'de ters DNS aramalarının neden olduğunu gördük.

O neden

senin sshd_config (genellikle /etc/ssh/sshd_config) içinde
UseDNS no 

ayarlayarak sshd üzerinden DNS aramaları devre dışı bırakarak çözülebilir. Bu genellikle Gilles yazısının this iş parçacığına göre yapması güvenlidir.

Kanalı bağlarken zaman aşımını arttırmak için başka bir seçenek daha. Channel.connect, bir zaman aşımı argümanı (milisaniye), ör. channel.connect(60000). Bağlandığınız sunucuyu kontrol etmiyorsanız, bu yararlı olabilir.

İlgili konular