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

SSH端口转发案例,命令及服务器配置

SSH端口转发-案例,命令及服务器配置三种转发类型本地转发-L远程转发-R动态转发-D简单理解:ABC三台机AC机器无法直接互通,但是B分别能和AC互通,所以AC通过B转发互通本地




SSH 端口转发 - 案例,命令及服务器配置

三种转发类型


  • 本地转发 -L
  • 远程转发 -R
  • 动态转发 -D

简单理解: ABC三台机 AC机器无法直接互通, 但是B分别能和AC互通, 所以AC通过B转发互通


本地 SSH 端口转发

将远程 server 的某个端口映射到本地的某个端口,通常用于A机器通过B登录C , 因为无法直接连通C,但是B可以连通C的情况

(如果是跳板机登录其他服务器,可以使用-J 参数跳转)

访问路径: 自己或者同局域网用户 --> 本机:Port --> SSH隧道 --> 跳转机 --> 远程服务:Port

Command:

ssh -L [本地主机:]本地主机端口:远程网络主机:远程网络主机端口 转发服务器
ssh -L 0.0.0.0:8080:HOST_C:8080 root@HOST_A # 本地主机可以忽略不写,默认是127.0.0.1
ssh -L 127.0.0.1:8080:HOST_C:8080 root@HOST_A # 自查127.0.0.1和0.0.0.0区别

Example:

* `ssh -L 8000:10.10.30.3:10000 10.10.20.2` # 通过ssh 登录 10.10.20.2 ,将远程10.10.30.3的端口10000映射到本地计算机的8000端口上
* `ssh -L 10086::10086 10.10.20.2` # 将10.10.20.2的10086端口映射到本地

远程端口转发

将本机(或本地局域网中其他服务器)某个端口,映射到服务器的端口上,通常用于提供给外网访问(因为服务器有公网IP鸭)

访问路径: 用户 --> Server:Port —> SSH隧道 --> 本地主机端口 --> 本机服务端口(或局域网其他主机)

重要提示:

默认情况下,OpenSSH 只允许从服务器本机连接到远程转发端口,使用netstat -anlp 查看监听端口时能看到监听的是 127.0.0.1:Port
如何能让其他用户通过Server IP访问呢 ? 需要监听 0.0.0.0:Port
修改服务器的 /etc/ssh/sshd_config ,修改或添加一行,有如下三个可选项
GatewayPorts No (设默认只允许来自服务器主机的本地连接)
GatewayPorts Yes (Internet上的任何人都可以连接到远程转发端口)
GatewayPorts clientspecified (可以指定一个可以连接的IP地址,如果没有指定的话,则任何人都可以访问)

Command:

ssh -R [登录主机:]登录主机端口:本地网络主机:本地网络主机端口 代登录主机

Example:


  • ssh -R 10.10.20.2:3306:localhost:3306 10.20.20.2 # 将本地3306端口映射给远程10.20.20.2服务器的3306端口
  • ssh -R 10.10.20.2:3306:192.168.2.5:3306 10.20.20.2 # 将本地局域网中192.168.2.5的3306端口映射给远程10.20.20.2服务器的3306端口
  • ssh -o -R 0:localhost:3306 10.20.20.2 # 将本地3306端口映射给远程服务器的一个随机端口,连接后第一行输出会显示具体是哪个端口 ex:Allocated port 41389 for remote forward to localhost:3306
  • ssh -R 52.194.1.73:8080:localhost:80 xxxxxx # 此时只有 52.194.1.73 能够访问 xxxxx 的8080端口,前提要设置GatewayPorts clientspecified

服务器端配置

必须在服务器上启用 OpenSSH 服务器配置文件中的 AllowTcpForwarding 选项,才能允许远程端口转发。

不过默认情况下该功能是打开的。有如下可选项:


  • yes 或 all,以允许所有 TCP 转发
  • no,以防止所有 TCP 转发,本地允许本地转发,远程允许远程转发。

另一个选项是 AllowStreamLocalForwarding,它可以用于转发 Unix 域套接字。它允许使用与 AllowTcpForwarding 相同的值。默认值是yes。

AllowTcpForwarding remote
AllowStreamLocalForwarding no

动态端口转发

无需固定指定被访问目标主机的端口号。这个端口号需要在本地通过协议指定,该协议就是简单、安全、实用的 SOCKS 协议。

简单讲就是, 通过sock代理将所有流量通过server转发. server能访问的ip,你也就都能访问了

Command:

ssh -D [本机:]本机端口

Example:

# 如何使用?
举例
* 浏览器设置sock代理为 server:端口
* ssh -o ProxyCommand='/usr/bin/nc -X 5 -x 127.0.0.1:5000 %h %p' user@host2 # 给ssh套上sock代理并通过代理登陆host2

注意事项


  • 只要SSH不断开,连接就一直存在,同理断开SSH连接就会断开
  • 如果不是以root身份设置端口转发的话,转发端口只能使用大于1024的端口号。


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • springboot启动不了_Spring Boot + MyBatis 多模块搭建教程
    作者:枫本非凡来源:www.cnblogs.comorzlinp9717399.html一、前言1、创建父工程最近公司项目准备开始重构,框 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
author-avatar
明天会更好--好过_652
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有