Eu criei anteriormente um conjunto de códigos para acesso remoto ao SSH. Recentemente, há um requisito e eu preciso passar por uma máquina de salto para acessar o serviço de destino. Depois de pesquisar on -line por um longo tempo, não consegui encontrar um exemplo melhor, então olhei através da API JSCH sozinha. Mas eu vi isso em um nevoeiro. Afinal, penso sobre isso, o princípio do encaminhamento de portas é mapear o nó de destino IP: Port to localhost: Port e, em seguida, envie uma mensagem através do localhost: Port para atingir o nó de destino?
Com essa inferência, modifiquei o código anterior.
Não vou dizer muito sobre o código original que se conecta ao servidor de nó de destino através do JSCH. Vou usar o Baidu para fazê -lo, e há muitos online.
A seguir, o código modificado:
/ ** * Obtenha a conexão * @param ip salto host * @param nome de usuário Jump Nome de usuário * @param pwd jump senha * @param porta porta porta * @return Channelsftp Valor de retorno * @THOWS JSCHEXCECTIONCECTIONEXCECTIONSEXCEMENTO */ public static Channelsftp Connect (string ip, string username, string pwd, int) portrows jschExcents jschExcextp (string string, string username, string pwd, int) port). } Sessão sshsession = null; JSCH JSCH = new JSCH (); sshSession = jsch.getSession (nome de usuário, ip, porta); sshsession.setPassword (PWD); Propriedades sshconfig = new Properties (); sshconfig.put ("stricthostykeckking", "não"); sshconfig.put ("preferredauthentications", "senha, teclado interativo"); sshsession.setConfig (sshconfig); sshsession.connect (tmout); // o tempo limite pode ser definido // a parte da porta mapeada para o sshsession.setportForwardingl local (porta local, endereço de destino, 22); // Depois de concluir o mapeamento de apelação, você pode se conectar à sessão da sessão = JSCH.GetSession ("Nome de usuário do Serviço Target", "127.0.0.1", porta local); Propriedades remotecfg = new Properties (); remotecfg.put ("stricthostkeychecking", "não"); remotecfg.put ("preferredauthentications", "senha, teclado interativo"); session.setConfig (remotecfg); session.setPassword ("Senha de serviço de destino"); session.Connect (); // Como mudar você mesmo no futuro? Existem muitos canais usados online. Canal = (canal) session.openchannel ("sftp"); // crie canal de comunicação SFTP Channel.connect (); Channelsftp sftp = (canalnelsftp) canal; retornar SFTP; }Finalmente, o teste foi usado para acessar o diretório do nó de destino através do SFTP e foi bem -sucedido.
O método acima de usar a estrutura JSCH para acessar outros nós através de uma máquina de salto é todo o conteúdo que eu compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.