Anteriormente he creado un conjunto de códigos para el acceso remoto a SSH. Recientemente, existe un requisito y necesito pasar por una máquina de salto para acceder al servicio de destino. Después de buscar en línea durante mucho tiempo, no pude encontrar un mejor ejemplo, así que miré a través de la API JSCH por mí mismo. Pero lo vi en una niebla. Después de todo, lo pienso, es el principio de reenvío de puertos para mapear el nodo de destino IP: puerto a localhost: puerto, y luego enviar un mensaje a través de Localhost: puerto para alcanzar el nodo de destino?
Con esta inferencia, modifiqué el código anterior.
No diré mucho sobre el código original que se conecta al servidor de nodo de destino a través de JSCH. Usaré Baidu para hacerlo, y hay muchos en línea.
El siguiente es el código modificado:
/ ** * Obtenga la conexión * @param IP Jump Host * @param UserName Jump Username * @param pwd Password de salto * @param puerto salto de puerto * @return canalftp valores de retorno * @throws jschexception Conexión excepción */ public static Channelsftp Conect (String ip, string userneNeN } Sesión sshsession = null; Jsch jsch = new JSch (); sshsession = jsch.getSession (nombre de usuario, ip, puerto); sshsession.setPassword (PWD); Propiedades sshconfig = new Properties (); sshconfig.put ("stricthostKeyChecking", "no"); sshconfig.put ("PreferedAuthentications", "Contraseña, teclado-interactivo"); sshsession.setConfig (sshconfig); sshsession.connect (tmout); // El tiempo de espera se puede establecer // la parte del puerto asignado al sshsession local.setportforwardingl (puerto local, dirección de nodo objetivo, 22); // Después de completar la asignación de apelaciones, puede conectarse a la sesión Session = jsch.getSession ("nombre de usuario del servicio objetivo", "127.0.0.1", puerto local); Propiedades remotecfg = new Properties (); remotecfg.put ("stricthostKeyChecking", "no"); remotecfg.put ("PreferredAuthentications", "Contraseña, teclado-interactivo"); session.setConfig (remotecfg); session.setPassword ("contraseña de servicio de destino"); session.connect (); // ¿Cómo cambiarlo usted mismo en el futuro? Hay muchos canales utilizados en línea. Canal = (canal) session.openchannel ("sftp"); // crear sftp comunicación canal.connect (); Channelsftp sftp = (Channelsftp) canal; devolver sftp; }Finalmente, la prueba se utilizó para acceder al directorio del nodo de destino a través de SFTP, y fue exitoso.
El método anterior para usar el marco JSCH para acceder a otros nodos a través de una máquina de salto es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.