之前搞了套远程访问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框架通过跳转机访问其他节点的更多相关文章

  1. 一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面

    SpringBoot springboot的目的是为了简化spring应用的开发搭建以及开发过程.内部使用了特殊的处理,使得开发人员不需要进行额外繁锁的xml文件配置的编写,其内部包含很多模块的配置只 ...

  2. day06-初识Vuetify框架UI框架和使用域名访问本地项目

    本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...

  3. Thinkphp框架网站 nginx环境 访问页面access denied

    今日不熟一个tiinkphp框架网站的时候,由于服务器环境是centos6.5+nginx1.8,已经运行php商城项目很正常, 本以为一切比较简单,直接新建了项目文件夹,xftp上传了程序,并配置n ...

  4. nginx跳转访问

    server { listen 8888; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; ...

  5. LeetCode:访问所有节点的最短路径【847】

    LeetCode:访问所有节点的最短路径[847] 题目描述 给出 graph 为有 N 个节点(编号为 0, 1, 2, ..., N-1)的无向连通图. graph.length = N,且只有节 ...

  6. [Swift]LeetCode847. 访问所有节点的最短路径 | Shortest Path Visiting All Nodes

    An undirected, connected graph of N nodes (labeled 0, 1, 2, ..., N-1) is given as graph. graph.lengt ...

  7. 访问子节点childNodes

    访问子节点childNodes 访问选定元素节点下的所有子节点的列表,返回的值可以看作是一个数组,他具有length属性. 语法: elementNode.childNodes 注意: 如果选定的节点 ...

  8. CC10:访问单个节点的删除

    题目 实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点. 给定待删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true 解法 这道题并不难,主要是题目中这句话确定 ...

  9. [源码解析] 深度学习分布式训练框架 horovod (14) --- 弹性训练发现节点 & State

    [源码解析] 深度学习分布式训练框架 horovod (14) --- 弹性训练发现节点 & State 目录 [源码解析] 深度学习分布式训练框架 horovod (14) --- 弹性训练 ...

随机推荐

  1. iOS 通讯录空格

    iOS 通讯录联系人出现 ASCII 码值为 160 的空格  NOTE:       这里的"空格"是指 在通讯录中取出的联系人中带有特殊空格 带有特殊空格的字符串 " ...

  2. Java基础总结--Java编程环境变量配置

    1.jdk--bin--都是命令行程序(图形化是对命令行的封装)eg javac&java执行javac必须切换到其所在目录--太麻烦---想在任意目录下使用要执行一个命令--先在当前目录下找 ...

  3. Linux命令用法

    1.cut http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html 2.sed http://www.cnblogs.com ...

  4. asp.net上传文件限制解决方案

    环境:VS2012,IIS7 利用web uploader实现了一个文件上传的功能,但是遇到上传大小的限制,在web.config的<system.web>节点下添加如下代码: <h ...

  5. java中this关键字解析

    由于this关键字在Java程序中经常见到,笔者索性把它的用法总结一下,来和大家一到互相学习一下.总的来说this用在下面几个地方: (1)当局部变量和成员变量同名的时候,需要用this来加以区分 如 ...

  6. OR in Matrix

    OR in Matrix Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submi ...

  7. hadoop2 YARN/Mv2中 ApplicationMaster相关问题及介绍

    ApplicationMaster是什么? ApplicationMaster是一个框架特殊的库,对于Map-Reduce计算模型而言有它自己的ApplicationMaster实现,对于其他的想要运 ...

  8. 0_Simple__simpleAtomicIntrinsics + 0_Simple__simpleAtomicIntrinsics_nvrtc

    原子操作.并且在静态代码和运行时编译两种条件下使用. ▶ 源代码:静态使用 #ifndef _SIMPLEATOMICS_KERNEL_H_ #define _SIMPLEATOMICS_KERNEL ...

  9. Android 开发笔记___RadioButton

    horizontal <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" and ...

  10. Robotframework自动化系统:筛选结果数量统计

    Robotframework自动化系统:筛选结果数量统计 上一个节点已经可以随机选中某一个下拉框的值,我们在使用evaluate随机数的时候需要计算下拉选项总数,这时候我们是手工计算输入的:这时候如果 ...