J'ai déjà créé un ensemble de codes pour l'accès à distance à SSH. Récemment, il y a une exigence et je dois passer par une machine à sauter pour accéder au service cible. Après avoir cherché en ligne pendant longtemps, je n'ai pas pu trouver un meilleur exemple, alors j'ai regardé par moi-même l'API JSCH. Mais je l'ai vu dans un brouillard. Après tout, j'y pense, le principe de la transfert de port est-il pour cartographier le nœud cible IP: Port vers localhost: port, puis envoyer un message via localhost: port pour atteindre le nœud cible?
Avec cette inférence, j'ai modifié le code précédent.
Je ne dirai pas grand-chose sur le code d'origine qui se connecte au serveur de nœuds cible via JSCH. Je vais utiliser Baidu pour le faire, et il y en a beaucoup en ligne.
Ce qui suit est le code modifié:
/ ** * Obtenez la connexion * @param ip Jump Host * @param username Jump Name * @param pwd Jump Motword * @Param Port Jump Port * @return channelsftp RETOUR Valeur * @throws jschexception Connection Exception * / public Static ChannelsFftp Connect (String ip, String Username, String pwd, int port) Jschexception {if (Port <= 0) {port = port; } Session sshSession = null; Jsch jsch = new jsch (); sshSession = jsch.getSession (nom d'utilisateur, ip, port); sshSession.SetPassword (PWD); Propriétés sshConfig = new Properties (); sshConfig.put ("stricthostKeyChecking", "non"); sshConfig.put ("Préférative Authentications", "Mot de passe, clavier-interactif"); sshSession.setConfig (sshconfig); sshSession.Connect (tMout); // Le délai d'attente peut être défini // la partie du port mappée au SSHSession local.SetportForwardingl (port local, adresse du nœud cible, 22); // Après avoir terminé le mappage d'appel, vous pouvez vous connecter à la session Session = jsch.getSession ("nom d'utilisateur cible du service", "127.0.0.1", port local); Propriétés RemoteCfg = nouvelles propriétés (); Remotecfg.put ("StricthostKeyChecking", "Non"); RemoteCfg.put ("Aauthentications privilégiées", "mot de passe, clavier-interactif"); session.setConfig (RemoteCFG); session.setpassword ("Mot de passe du service cible"); session.connect (); // Comment le changer vous-même à l'avenir? Il existe de nombreux canaux utilisés en ligne. Channel = (canal) session.openchannel ("sftp"); // créer SFTP Communication Channel Channel.Connect (); CanalSftp Sftp = (canauxftp) canal; retourner sftp; }Enfin, le test a été utilisé pour accéder au répertoire du nœud cible via SFTP, et il a réussi.
La méthode ci-dessus d'utilisation du framework JSCH pour accéder à d'autres nœuds via une machine à sauter est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.