使用JSCH框架通过跳转机访问其他节点的方法
之前搞了套远程访问ssh进行操作的代码,最近有需求,需要通过一台跳转机才能访问目标服务。在网上搜了半天,也没找到比较好的例子,就自己翻阅了下JSCH的API。但是看的云里雾里的。联想了下,端口转发的原理是否是把目标节点ip:port映射到localhost:port,然后通过localhost:port发送消息就可以抵达目标节点呢?
带着这个推论,改造了下之前的代码。
原有代码通过jsch连接目标节点服务器这里就不多说了,自行百度,网上很多。
下面贴下改造之后的代码:
/** * 获取连接 * @param ip 跳转机host * @param userName 跳转机用户名 * @param pwd 跳转机密码 * @param port 跳转机端口 * @return ChannelSftp 返回值 * @throws JSchException 连接异常 */ public static ChannelSftp connect(String ip, String userName, String pwd, int port) throws JSchException { if (port <= 0) { port = PORT; } Session sshSession = null; JSch jsch = new JSch(); sshSession = jsch.getSession(userName, ip, port); sshSession.setPassword(pwd); Properties sshConfig = new Properties(); sshConfig.put("StrictHostKeyChecking", "no"); sshConfig.put("PreferredAuthentications", "password,keyboard-interactive"); sshSession.setConfig(sshConfig); sshSession.connect(TMOUT);//可设置超时时间 //此处开始为端口映射到本地的部分 sshSession.setPortForwardingL(本地端口, 目标节点地址, 22); //完成上诉映射之后,即可通过本地端口连接了 Session session = jsch.getSession("目标服务用户名", "127.0.0.1",本地端口); Properties remoteCfg = new Properties(); remoteCfg.put("StrictHostKeyChecking", "no"); remoteCfg.put("PreferredAuthentications", "password,keyboard-interactive"); session.setConfig(remoteCfg); session.setPassword("目标服务密码"); session.connect(); //后续如何可自行改变,网上运用很多 Channel channel = (Channel) session.openChannel("sftp");//创建sftp通信通道 channel.connect(); ChannelSftp sftp = (ChannelSftp) channel; return sftp; }
最后测试通过sftp访问目标节点的目录,成功。
以上这篇使用JSCH框架通过跳转机访问其他节点的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java异常--常见方法--自定义异常--增强try(try-with-resources)详解
这篇文章主要介绍了Java异常--常见方法--自定义异常--增强try(try-with-resources)的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-03-03MybatisPlus QueryWrapper常用方法实例
MyBatis-Plus(opens new window)是一个MyBatis(opens new window)的增强工具,在 MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,下面这篇文章主要给大家介绍了关于MybatisPlus QueryWrapper常用方法的相关资料,需要的朋友可以参考下2022-04-04
最新评论