com.jcraft.jsch.JSchException: le canal n'est pas ouvert lors de l'ouverture d'un canal dans jsch
Lors de la connexion à un hôte distant à l'aide de jsch version 0.1.51 nous l'occasion de rencontrer l'exception suivante lors de l'appel de Channel.connect()
sur un ChannelExec
.
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)
Le code que nous utilisons, après la session a été créé, c'est:
ChannelExec channel = (ChannelExec) session.openChannel("exec");
channel.setCommand("echo hello");
channel.connect(); //Error here
La Channel.connect()
appel renvoie généralement en moins de 100 ms, mais lorsque cette erreur apparaît à l'appel se bloque pendant plus de 20 secondes avant de jeter l'exception.
OriginalL'auteur K Erlandsson | 2015-11-24
Vous devez vous connecter pour publier un commentaire.
Le message d'exception est un peu trompeur. L'erreur peut se produire lorsqu'il y a un délai d'attente pour la
SSH_MSG_CHANNEL_OPEN_CONFIRMATION
message depuis le serveur. Le délai d'expiration par défaut dans jsch (version 0.1.51) est de 20 secondes. Je pense qu'il y a d'autres situations où le même message d'erreur atteint son apogée, mais je n'ai pas étudié plus loin.Alors qu'il y en peut avoir de nombreuses raisons pour le délai, nous l'avons vu causés par des recherches DNS inversées dans sshd de OpenSSH qui a eu une longue période de temps en temps.
Que la cause peut être résolu par la désactivation des recherches DNS de sshd par la mise en
dans sshd_config (généralement
/etc/ssh/sshd_config
). C'est généralement sans danger de le faire en fonction de ce Gilles écrit dans cette fil.Une autre option est d'augmenter le délai d'attente lors de la connexion du canal.
Channel.connect
accepte un argument timeout (en millisecondes), par exemplechannel.connect(60000)
. Cela peut être utile si vous n'avez pas de contrôle sur le serveur auquel vous vous connectez.OriginalL'auteur K Erlandsson