使用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框架通过跳转机访问其他节点的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 使用JSCH框架通过跳转机访问其他节点的方法

    之前搞了套远程访问ssh进行操作的代码,最近有需求,需要通过一台跳转机才能访问目标服务.在网上搜了半天,也没找到比较好的例子,就自己翻阅了下JSCH的API.但是看的云里雾里的.联想了下,端口转发的原理是否是把目标节点ip:port映射到localhost:port,然后通过localhost:port发送消息就可以抵达目标节点呢? 带着这个推论,改造了下之前的代码. 原有代码通过jsch连接目标节点服务器这里就不多说了,自行百度,网上很多. 下面贴下改造之后的代码: /** * 获取连接 *

  • Python轻量级ORM框架Peewee访问sqlite数据库的方法详解

    本文实例讲述了Python轻量级ORM框架Peewee访问sqlite数据库的方法.分享给大家供大家参考,具体如下: ORM框架就是 object relation model,对象关系模型,用来实现把数据库中的表 映射到 面向对象编程语言中的类,不需要写sql,通过操作对象就能实现 增删改查. ORM的基本技术有3种: (1)映射技术 数据类型映射:就是把数据库中的数据类型,映射到编程语言中的数据类型.比如,把数据库的int类型映射到Python中的integer 类型. 类映射:把数据库中的

  • ThinkPHP5.1框架页面跳转及修改跳转页面模版示例

    本文实例讲述了ThinkPHP5.1框架页面跳转及修改跳转页面模版.分享给大家供大家参考,具体如下: 对应的控制器 创建对应的HTML 比如: admin(模块)/lpp(控制器)/index(方法) 对应的html文件: view->lpp->index.html 1.index.html布局 <form action="{:url('bbc')}" method="post"> <h3>用户登录界面</h3> &l

  • TP5框架页面跳转样式操作示例

    本文实例讲述了TP5框架页面跳转样式操作.分享给大家供大家参考,具体如下: 1.效果图 2.上干货 为了增加对移动设备的支持,在  /application/common.php加入以下函数: function isMobile() { if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) { return true; } if (isset ($_SERVER['HTTP_VIA'])) { return stristr($_SERVER['HTTP_VIA'

  • python框架flask入门之路由及简单实现方法

    路由 简单来说,路由就是一个url到函数的映射,通过路由规则,可以使得url被指定的函数进行处理解析. 我们都知道现在的web系统的URL都是可以自定义的,也就是我们可以指定url和具体的业务控制器相关联,而这些就是通过路由来实现的. flask中集成了路由处理模块,我们只需要简单地使用route装饰器就可以实现路由匹配. @app.route('/') def index(): return 'Index Page' @app.route('/hello') def hello(): retu

  • JAVASCRIPT实现的WEB页面跳转以及页面间传值方法

    但有时候,需要当某事件触发时,我们先做一些操作,然后再跳转,这时,就要用JAVASCRIPT来实现这一跳转功能. 下面是具体的做法: 一:跳转到新页面,并且是在新窗口中打开时: 复制代码 代码如下: function gogogo() { //do someghing here... window.open("test2.html"); } window是一个javascript对象,可以用它的open方法,需要注意的是,如果这个页面不是一相相对路径,那么要加http://,比如: 复

  • JS简单实现禁止访问某个页面的方法

    本文实例讲述了JS简单实现禁止访问某个页面的方法.分享给大家供大家参考,具体如下: 有时候需要禁止某些页面不能访问,而跳转到其他的页面.这里提供了一些参考的代码. <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-w

  • thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法

    本文实例讲述了thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法.分享给大家供大家参考.具体分析如下: 3.2版本支持根据当前的运行环境生成Lite文件,可以替换框架的入口文件或者应用入口文件,提高运行效率. 我们的建议是在生产环境中关闭调试模式后生成Lite文件. 注意,目前SAE平台不支持直接生成Lite文件. 生成Lite文件 要生成Lite文件,需要在入口文件中增加常量定义: 复制代码 代码如下: define('BUILD_LITE_FILE',true); 默认

  • php禁止直接从浏览器输入地址访问.php文件的方法

    本文实例讲述了php禁止直接从浏览器输入地址访问.php文件的方法.分享给大家供大家参考.具体实现方法如下: 一般来说对于有些重要的文件我们并不希望用户可以直接输入地址进行访问,对此我们需要进行一些设置.下面总结了一些php禁止直接从浏览器输入地址访问.PHP文件方法,非常实用. 比如说http://www.jb51.net/xx.php 这个文件我不想让别人直接从浏览器输入地址访问. 但是如果从任何网站连接http://www.jb51.net/xx.php过来不可以访问的话,本机建立连接也无

  • C#简单访问SQLite数据库的方法(安装,连接,查询等)

    本文实例讲述了C#简单访问SQLite数据库的方法.分享给大家供大家参考,具体如下: 下载最新版SQLite(http://www.sqlite.org/download.html),其他版本也可以,这里使用的版本是sqlite-3_6_6_1 a.解压后copy c:\sqlite-3_6_6_1 b.进入cmd模式,进入sqlite-3_6_6_1目录,执行sqlite3 mytest.db c. create table test (seq int,desc varchar(8)); in

随机推荐