热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SSH高级应用(端口转发)

转发自:http:www.cnblogs.comsting2mep5167730.html基于SSH协议的端口转发【前言】最近一直在使用ssh协议的端口转发(隧道&#

转发自:http://www.cnblogs.com/sting2me/p/5167730.html

基于SSH协议的端口转发

【前言】

最近一直在使用ssh协议的端口转发(隧道)功能,完成对内网空透等。这篇文章将主要讲解3种常用的ssh tunnelling使用方法和基本原理。

在介绍具体内容前,我先奉上端口转发的常用情景:

图中的“我”,现在是要访问内部网站的192.168.1.0/24网段里面的服务器,然而由于不在一个网段,我是不可以直接ssh到内部网络的服务器。

通常的做法是先ssh到“SSH Server”,然后再在ssh server上访问内部网站的服务器

我能不能不用上ssh server就直接ssh到内部服务器呢?从下面的文章你将得到答案。

 

SSH 端口转发主要有3种方式:

  • 本地端口转发

格式如下:

ssh -L [bind_address:]port:host:hostport &#64;<ssh server>

如上图我现在要直接访问IP地址为192.168.1.2的服务器&#xff0c;可以在本地(SSH Client)这样做&#xff1a;

Step 1&#xff1a;

 

ssh -N -L 11122:192.168.1.2:22 peter&#64;10.1.1.1

或者&#xff1a;

ssh -N -L 10.10.10.10:11122:192.168.1.2:22 peter&#64;10.1.1.1
# 如果你想绑定本机特定的IP可以在port前加上IP地址&#xff0c;如上面的10.10.10.10

注意&#xff1a;peter是SSH Server上的一个用户名&#xff0c;“-N” 表示不执行命令&#xff0c;也就是不登录到SSH Server上去。

输入SSH Server密码,命令会等在那&#xff0c;不要结束这个就行

Step 2:

 

ssh -p 11122 <192.168.1.2的用户名>&#64;127.0.0.1

或者&#xff1a;

ssh -p 11122 <192.168.1.2的用户名>&#64;10.10.10.10

 

输入192.168.1.2服务器的密码&#xff0c;就登录了内部网络的192.168.1.2的机器了。

原理分析:

当你执行Step 1的命令时&#xff0c;ssh client程序会在本地监听指定的11122端口&#xff0c;你可以通过下面命令看到

netstat -ntlp |grep 11122

然后我们在Step 2中&#xff0c;我们ssh其实连接的是本地的11122端口&#xff0c;ssh client程序会帮我们转发到SSH Server的&#xff0c;然后SSH Server再帮我们转发到我们指定的192.168.1.2上的22端口


 

  • 远程端口转发

格式如下&#xff1a;

ssh -R [bind_address:]port:host:hostport &#64;<ssh server>

与 “本地端口转发”最大的不同是&#xff0c;这个命令后&#xff0c;绑定的端口不在是本地的端口&#xff0c;而是SSH Server&#xff08;10.1.1.1/192.168.1.1)上的端口&#xff0c;

注意&#xff1a;由于默认配置下&#xff0c;远程SSH Server只能绑定到127.0.0.1地址上&#xff0c;所以SSH Server以外的机器是不能使用到这个端口转发的&#xff0c;解决方法&#xff1a;

用sudo权限打开SSH Server上的/etc/ssh/sshd_config&#xff1a; sudo vim /etc/ssh/sshd_config ,加入 

GatewayPorts yes

然后重启ssh service: sudo service ssh restart

Step 1&#xff1a;

ssh -N -R *:11122:192.168.1.2:22 peter&#64;10.1.1.1

*是用来表示使用SSH Server的所有地址&#xff0c;你也可以使用10.1.1.1这个地址

Step 2:

ssh -p 11122 <192.168.1.2上的用户>&#64;10.1.1.1

注意&#xff0c;跟本地端口转发不同的是&#xff0c;上面的地址和端口都是远程SSH Server的

 

  • 动态端口转发

格式如下&#xff1a;

ssh -D [bind_address:]port &#64;<ssh server>

 

前面我介绍的两种方式都有一个比较大的问题&#xff0c;只能做到点对点的代理&#xff0c;或者说一个主机的port到另一个主机port上的映射&#xff0c;

动态端口就是用来解决这个问题的&#xff0c;完成从点到面的代理&#xff0c;或者说完成本机一个port到任意远程地址和端口的映射

一个比较典型的应用就是web代理服务器&#xff0c;下面我们准备把SSH Server变成一个web代理服务器

Step 1&#xff1a;

ssh -N -D 3456 peter&#64;10.1.1.1

注意&#xff1a;现在SSH Client的3456就被用来转发http请求了

Step 2&#xff1a;

 设置Firefox使用本地127.0.0.1的3456端口来做http代理

 


 注意&#xff0c;一定要选择SOCK5 或者SOCK4&#xff0c;因为ssh只能作为SOCK主机而不是一般的HTTP主机代理

这样&#xff0c;我们就可以使用SSH Server的代理&#xff0c;用Firefox来访问所有的页面了。

 

【结尾】

ssh -C -f -N -g -L listen_port:DST_Host:DST_port user&#64;Tunnel_Host
ssh -C -f -N -g -R listen_port:DST_Host:DST_port user&#64;Tunnel_Host
ssh -C -f -N -g -D listen_port user&#64;Tunnel_Host
-f Fork into background after authentication.

后台认证用户/密码&#xff0c;通常和-N连用&#xff0c;不用登录到远程主机。

 

-D port
指定一个本地机器 “动态的&#39;’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

-C Enable compression.
压缩数据传输。

-N Do not execute a shell or command.
不执行脚本或命令&#xff0c;通常与-f连用。

-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D参数中&#xff0c;允许远程主机连接到建立的转发的端口&#xff0c;如果不加这个参数&#xff0c;只允许本地主机建立连接。

 

此外&#xff0c;我们利用ssh可以为不安全的数据传输进行加密传输&#xff0c;比如ftp&#xff0c;也可以加密mysql的访问。

 



推荐阅读
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • 本文介绍了网页播放视频的三种实现方式,分别是使用html5的video标签、使用flash来播放以及使用object标签。其中,推荐使用html5的video标签来简单播放视频,但有些老的浏览器不支持html5。另外,还可以使用flash来播放视频,需要使用object标签。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
author-avatar
看人不顺眼说明6自己没教养
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有