原文链接:https://www.yuque.com/tec-nine/architecture/mgxc71

SSH 命令帮助

命令行选项有:

 -a      禁止转发认证代理的连接.

 -A      允许转发认证代理的连接.  可以在配置文件中对每个主机单独设定这个参数.

         代理转发须谨慎.  某些用户能够在远程主机上绕过文件访问权限 (由于代理的 UNIX 域 socket), 他们可以通过转发的连接访问本地代理.
攻击者不可能从代理获得密钥内容, 但是他们能够操作这些密钥, 利用加载到代理上 的身份信息通过认证. -b bind_address
在拥有多个接口或地址别名的机器上, 指定收发接口. -c blowfish|3des|des
选择加密会话的密码术. 3des 是默认算法. 3des (triple-des) 用三支不同的密钥做加密-解密-加密三次运算, 被认为比较可靠.
blowfish 是一种快速的分组加密术(block cipher), 非常安全, 而且速度比 3des 快的多. des 仅支持 ssh 客户端,
目的是能够和老式的不支持 3des 的协议第一版互操作. 由于其密码算法上的弱点, 强烈建议避免使用. -c cipher_spec
另外, 对于协议第二版, 这里可以指定一组用逗号隔开, 按优先顺序排列的密码术. 详见 Ciphers. -e ch|^ch|none
设置 pty 会话的 escape 字符 (默认字符: ‘~’). escape 字符只在行首有效, escape 字符后面跟一个点 (‘.’) 表示结束连接, 跟一个
control-Z 表示挂起连接(suspend), 跟 escape 字符自己 表示输出这个字符. 把这个字符设为 “none” 则禁止 escape 功能,
使会话完全透明. -f 要求 ssh 在执行命令前退至后台. 它用于当 ssh 准备询问口令或密语, 但是用户希望它在后台进行. 该选项隐含了 -n 选项.
在远端机器上启动 X11 程序的推荐手法就是类似于 ssh -f host xterm 的命令. -g 允许远端主机连接本地转发的端口. -i identity_file
指定一个 RSA 或 DSA 认证所需的身份(私钥)文件. 默认文件是协议第一版的 $HOME/.ssh/identity 以及协议第二版的 $HOME/.ssh/id_rsa
和 $HOME/.ssh/id_dsa 文件. 也可以在配置文件中对每个主机单独指定身份文件. 可以同时使用多个 -i 选项
(也可以在配置文件中指定多个身份文件). -I smartcard_device
指定智能卡(smartcard)设备. 参数是设备文件, ssh 能够用它和智能卡通信, 智能卡里面存储了用户的 RSA 私钥. -k 禁止转发 Kerberos 门票和 AFS 令牌. 可以在配置文件中对每个主机单独设定这个参数. -l login_name
指定登录远程主机的用户. 可以在配置文件中对每个主机单独设定这个参数. -m mac_spec
另外, 对于协议第二版, 这里可以指定一组用逗号隔开, 按优先顺序排列的 MAC(消息验证码)算法 (message authentication code). 详情以
MACs 为关键字查询. -n 把 stdin 重定向到 /dev/null (实际上防止从 stdin 读取数据). ssh 在后台运行时一定会用到这个选项. 它的常用技巧是远程运行 X11
程序. 例如, ssh -n shadows.cs.hut.fi emacs & 将会在 shadows.cs.hut.fi 上启动 emacs, 同时自动在加密通道中转发 X11 连接. ssh
在后台运行. (但是如果 ssh 要求口令或密语, 这种方式就无法工作; 参见 -f 选项.) -N 不执行远程命令. 用于转发端口. (仅限协议第二版) -o option
可以在这里给出某些选项, 格式和配置文件中的格式一样. 它用来设置那些没有命令行开关的选项. -p port
指定远程主机的端口. 可以在配置文件中对每个主机单独设定这个参数. -q 安静模式. 消除所有的警告和诊断信息. -s 请求远程系统激活一个子系统. 子系统是 SSH2 协议的一个特性, 能够协助 其他应用程序(如 sftp)把SSH用做安全通路.
子系统通过远程命令指定. -t 强制分配伪终端. 可以在远程机器上执行任何全屏幕(screen-based)程序, 所以非常有用, 例如菜单服务. 并联的 -t 选项强制分配终端,
即使 ssh 没有本地终端. -T 禁止分配伪终端. -v 冗详模式. 使 ssh 打印关于运行情况的调试信息. 在调试连接, 认证和配置问题时非常有用. 并联的 -v 选项能够增加冗详程度.
最多为三个. -x 禁止 X11 转发. -X 允许 X11 转发. 可以在配置文件中对每个主机单独设定这个参数. 应该谨慎使用 X11 转发. 如果用户在远程主机上能够绕过文件访问权限 (根据用户的X授权数据库), 他就可以通过转发的连接访问本地 X11
显示器. 攻击者可以据此采取行动, 如监视键盘输入等. -C 要求进行数据压缩 (包括 stdin, stdout, stderr 以及转发 X11 和 TCP/IP 连接 的数据). 压缩算法和 gzip(1) 的一样, 协议第一版中,
压缩级别 “level” 用 CompressionLevel 选项控制. 压缩技术在 modem 线路或其他慢速连接上很有用, 但是在高速网络上反而
可能降低速度. 可以在配置文件中对每个主机单独设定这个参数. 另见 Compression 选项. -F configfile
指定一个用户级配置文件. 如果在命令行上指定了配置文件, 系统级配置文件 (/etc/ssh/ssh_config) 将被忽略. 默认的用户级配置文件是
$HOME/.ssh/config. -L port:host:hostport
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口,
一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接.
可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport -R port:host:hostport
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口,
一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接.
可以在配置文件中指定端口的转发. 只有用 root 登录远程主机 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport -D port
指定一个本地机器 “动态的” 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口,
一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议,
ssh 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发. -1 强制 ssh 只使用协议第一版. -2 强制 ssh 只使用协议第二版. -4 强制 ssh 只使用 IPv4 地址. -6 强制 ssh 只使用 IPv6 地址.

阿里云-内网穿透示例

ssh -CqTnN -R 9000:127.0.0.1:8081 aliyun

本地转发模式原理

创建本地转发模式的ssh隧道,命令如下

ssh -g -f -N -L forwardingPort:targetIP:targetPort user@sshServerIP

本机上的forwardingPort将会被监听,访问本机的forwardingPort,就相当于访问targetIP的targetPort,ssh隧道建立在本机与sshServer之间

本地转发模式 - 方案示例一

ServerA:10.1.0.1

ServerB:10.1.0.2

A#

ssh -f -N -L 9906:10.1.0.2:3306 root@10.1.0.2

上述命令表示从本机(ServerA)建立一个到ServerB(10.1.0.2)的ssh隧道,使用本地端口转发模式,监听ServerA本地的9906端口,访问本机的9906端口时,通讯数据将会被转发到ServerB(10.1.0.2)的3306端口。

本地转发模式 - 方案示例二

ServerAIP:10.1.0.1

ServerBIP:10.1.0.2

ServerCIP:10.1.0.3

ServerA与ServerB上没有开启任何mysql服务。

ServerC中开启了mysql服务,监听了3306端口。

A#

ssh -f -N -L 9906:10.1.0.3:3306 root@10.1.0.2

上述命令表示,从本机(ServerA)建立一条ssh隧道连接到10.1.0.2(ServerB),隧道使用本地转发模式建立,转发端口监听在本地的9906端口上,访问本机的9906端口时,数据会被ssh隧道转发到10.1.0.3(ServerC)的3306端口。

远程转发模式原理

创建远程转发模式的ssh隧道,命令如下

ssh -f -N -R forwardingPort:targetIP:targetPort user@sshServerIP

sshServer上的forwardingPort将会被监听,访问sshServer上的forwardingPort,就相当于访问targetIP的targetPort,ssh隧道建立在本机与sshServer之间。

远程转发模式 - 方案示例

B#

ssh -f -N -R 9906:10.1.0.2:3306 root@10.1.0.1

上述命令在ServerB中执行,执行后,即可在ServerA与ServerB之间建立ssh隧道,此时,ServerB是ssh客户端,ServerA是ssh服务端,隧道建立后,ServerA中的9906端口会被监听。此刻,我们通过外网IP登录到ServerA,在ServerA中访问本地回环地址的9906端口,即可访问到内网ServerB中的mysql服务。

不过你肯定注意到了,当使用远程转发的命令时,我并没有指定监听ServerA的外网IP,也没有使用"-g选项"开启网关功能,这是因为,即使你在命令中指定了IP地址,最终在ServerA中还是会只监听127.0.0.1的9906端口,你可以在ServerB中尝试一下如下命令

ssh -f -N -R 10.1.0.1:9906:10.1.0.2:3306 root@10.1.0.1

即使在ServerB中执行上述命令时指定了IP或者开启了网关功能,ServerA的9906端口仍然只监听在127.0.0.1上,当然,如果你一心想要通过别的主机访问ServerA的9906端口,也可以使用其他程序去反代ServerA的9906端口。

Linux解决ssh tunnels端口不能转发问题

Linux解决ssh tunnels端口不能转发问题

我们需要打开公网服务器网管开关/etc/ssh/sshd_config 修改 GatewayPorts yes

参考资料

  1. SSH隧道、端口转发和内网穿透 https://www.processon.com/view/link/642b8baa3aff4d5813d424b7
  2. ssh使用密钥进行认证 http://www.zsythink.net/archives/2375
  3. ssh代理转发 http://www.zsythink.net/archives/2422
  4. ssh端口转发:ssh隧道 http://www.zsythink.net/archives/2450
  5. ssh反向代理实现内网穿透【亲测可用】https://blog.csdn.net/liuxingyuzaixian/article/details/128705262

端口转发、Http Tunnel、内网穿透的更多相关文章

  1. 通过rinetd实现端口转发来访问内网的服务

    通过rinetd实现端口转发来访问内网的服务 一.   问题描述 通过外网来访问内网的服务 二.   环境要求 需要有一台能够外网访问的机器做端口映射,通过数据包转发来实现外部访问阿里云的内网服务 三 ...

  2. Linux通过端口转发来访问内网服务(端口转发访问阿里云Redis数据库等服务)

    # 安装rinetd wget http://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar -xvf rinetd.tar.gz& ...

  3. Linux 通过rinetd端口转发来访问内网服务

    可以通过端口映射的方式,来通过具有公网的云服务器 ECS 访问用户名下其它未购买公网带宽的内网 ECS 上的服务.端口映射的方案有很多,比如 Linux 下的 SSH Tunnel.rinetd,Wi ...

  4. 阿里云ECS linux通过rinetd 端口转发来访问内网服务

    一.场景说明: 可以通过端口映射的方式,来通过具有公网的云服务器 ECS 访问用户名下其它未购买公网带宽的内网 ECS 上的服务.端口映射的方案有很多,比如 Linux 下的 SSH Tunnel.r ...

  5. Linux 通过端口转发来访问内网服务

    Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具,系统内部服务受系统网服限制外部无法访问,需要通过rinetd映射将内网服务转发出来. 1. 下载解压 ...

  6. iptables端口转发规则(内网端口转外网端口)

    需求:外网124.202.173.118需要访问 10.45.225.70的内网54032端口,10.45.225.70服务器有公网地址139.129.109.81将内网地址端口转发到外网地址端口,并 ...

  7. 利用SSH端口转发实现远程访问内网主机远程桌面(一) 建立SSH转发

    近期家里更换了移动的宽带,拨号后拿到的是10开头的内网IP,就不能像之前一样通过路由器的端口映射实现从外网访问主机的远程桌面.这种情况下可以利用一台具有公网IP的服务器充当中转,利用SSH的隧道转发功 ...

  8. SSH 端口转发+内网穿透

    用最直白的语言对本文所有内容进行定义: 端口转发(-L):用A机器(内网)登录B机器(公网), 在A机器打开端口,将收到的所有请求转发到B机器的某个端口 (在代理机上执行) 内网穿透(-R):用A机器 ...

  9. rein 多平台支持的超便携端口转发与内网穿透工具

    介绍 本程序主要用于进行反向代理IP地址和端口,功能类似于 nginx 的 stream 模式和rinetd 的功能:在(1.0.5)版本开始,rein支持内网穿透,这一功能类似于frp 和ngrok ...

  10. NAT、端口映射、内网穿透、公网IP都是啥

    原文地址:https://wuter.cn/1756.html/ 一.IPv4地址 IP协议是为计算机网络相互连接进行通信而设计的协议,它是能使连接到网上的所有计算机网络实现相互通信的一套规则. 这里 ...

随机推荐

  1. vue实现自定义字体库

    先看效果是不是你所需要的,再看具体如何实现. 效果如下图所示: 有些字体需要下载,用图片就会变得很不清楚,这样我们就需要去下载字体库,操作步骤如下: 首先找到需要下载的字体库 然后放在项目里面 然后定 ...

  2. 面向对象程序设计 第二章 C++简单的程序设计

    目录 C++语言的特点 1.兼容C语言 · 它保持了C的简洁.高效和接近汇编语言等特点. · 对C的类型系统进行了改革和扩充. · C++也支持面向过程的程序设计,不是一个纯正的面向对象的语言 2.支 ...

  3. UI自动化之【maven+selenium环境搭建】

    一.下载maven包 官网: http://maven.apache.org/download.cgi 二.配置maven环境变量  配置完之后验证一下:(若出现以下信息可看到maven的版本号就表示 ...

  4. js 信息脱敏

    前端展示信息时,往往要对身份证号.手机号.地址等这类敏感信息进行部分隐藏显示,就是要脱敏处理 一个简单粗暴的脱敏处理方法记录下: hideSensitiveData (string, saveLeng ...

  5. C语言 (数据结构)在顺序表中用二分查找和冒泡排序算法

    main.c: #include <stdio.h> #include <stdlib.h> #include "SequenceList.h" int m ...

  6. .Net 5.0导出Execl的两种方式

    项目中经常会用到表格的导入导出今天来简绍一下我所了解的两种方式 1.拼接成表格的简单方式直接导出,服务器上不用安装其他程序 可以直接导出 public async Task<FileResult ...

  7. centos 通过yum安装docker-ce报错

    通过yum安装docker-ce报错,是因为本机安装过多次造成的,如下所示,需要解决掉冲突依赖,从新安装 1 从 https://mirrors.aliyun.com/docker-ce/linux/ ...

  8. Oracle数据库安装时,安装报错ins_emagent.mk

    安装oracle数据库过程中,通过图形界面安装,出现ins_emagent.mk报错提示 解决方法 修改$ORACLE_HOME/sysman/lib/ins_emagent.mk,将$(MK_EMA ...

  9. Blob、FormData

    Blob 在我的理解中这个就是一个二进制的存储类型,就像一张图片就是一组二进制,很多文件都是一组二进制.这个就是数据库用来存储二进制类型. FormData 为什么使用 FormData 来进行数据的 ...

  10. 2019年居然还出版了一本ASP学习的书籍

    ASP+Dreamweaver动态网站开发(第2版)孙更新,宾晟,李晓娜 著 内容简介 <ASP+Dreamweaver动态网站开发(第2版)>详细介绍了ASP的脚本语言基础.ASP的相关 ...