之前搞了套远程访问ssh进行操作的代码,最近有需求,需要通过一台跳转机才能访问目标服务。在网上搜了半天,也没找到比较好的例子,就自己翻阅了下JSCH的API。但是看的云里雾里的。联想了下,端口转发的原理是否是把目标节点ip:port映射到localhost:port,然后通过localhost:port发送消息就可以抵达目标节点呢?
带着这个推论,改造了下之前的代码。
原有代码通过jsch连接目标节点服务器这里就不多说了,自行百度,网上很多。
下面贴下改造之后的代码:
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; }
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- 如何进行 Java WebAPI 的版本控制?(Java WebAPI如何进行版本控制)
- Java 中如何利用文件来存储数据?(java如何用文件储存数据)
- Java 前端框架究竟是如何进行分类的?(java前端框架如何分类的)
- 如何轻松自定义 java 对象的 clone 行为?(如何自定义java对象的clone行为)
- Java 高并发场景的解决办法有哪些?(java高并发场景如何解决)
- Java 人脸识别具体有哪些应用场景呢?(Java人脸识别有哪些应用场景)
- JAVA 中如何运用 QT 来开发 GUI?(JAVA中怎么使用QT开发GUI)
- 如何在 MySQL 中优化插入大量数据的操作?(mysql insert大量数据时如何优化)
- 如何高效升级Redis客户端
- Java 中如何获取内存地址中的值?(java如何获取内存地址中的值)
猜你喜欢
AI推送时光机使用JSCH框架通过跳转机访问其他节点的方法
后端开发2023-05-30
咦!没有更多了?去看看其它编程学习网 内容吧