ssh反向代理和autossh

autossh反向代理

参考: https://blog.csdn.net/wesleyflagon/article/details/85304336

autossh一个用来启动ssh并且监控ssh的程序(所以在autossh中有[SSH OPTIONS]的选项),在ssh通道断开的情况下会重新启动ssh,也就是会重连(这个很重要)。

在这里插入图片描述

autossh利用ssh构建一个ssh转发的回路,然后发送一个test data,并且期待这个test data能返回来。

v1.3版本之后,添加了echo_port参数:可以在反射服务器上指定一个port,这个port将会把test data反射回来。这样可以防止远程的反射服务上端口被占用的情况。v1.3之前的版本没有echo_port这个参数,所以不加echo_port参数的时候,默认echo_port=port +1

  • -f

在运行ssh之前自动加载到后台.参数传递到ssh的时候会把-f flag去掉。-f选项在ssh和autossh上的意义是大不一样的。在autossh中加-f:when used with autossh ssh will be unable to ask for passwords or passphrases. When -f is used, the “starting gate” time (see AUTOSSH_GATETIME) is set to 0.

AUTOSSH_GATETIME:Specifies how long ssh must be up before we consider it a successful connection. The default is 30 seconds. Note that if AUTOSSH_GATETIME is set to 0, then not only is the gatetime behaviour turned off, but autossh also ignores the first run failure of ssh. This may be useful when running autossh at boot.

还是不要加-f 😦 。

  • -M
    在这里插入图片描述

    可以省略参数-M port,相当于自动选择一个随机本地端口port和echo_port=port + 1。
    在这里插入图片描述

举例

 autossh -M 10001:10002 -N -R 10000:127.0.0.1:22 example.com

本地端口10001转发到remote端口10002,执行ssh -N -R 10000:127.0.0.1:22 example.com,并且设置监视端口10001和10002用于监视这个ssh会话。

正向反向代理

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

解决方案1(比价靠谱)

https://zhuanlan.zhihu.com/p/112227542

https://www.lixl.cn/2020/010618877.html

ssh正向反向代理讲的很清楚:https://www.jianshu.com/p/50c4160e62ac

实现外网访问内网

https://segmentfault.com/a/1190000002718360

比较明确,但是没有图:https://segmentfault.com/a/1190000002718360

机器状况

机器号IP用户名备注
A192.168.0.Ausr_a目标服务器,在局域网中,可以访问 A
BB.B.B.Busr_b代理服务器,在外网中,无法访问 A
C--可以直接访问 B,无法直接访问 A

在这里插入图片描述

目标

从 C 机器使用 SSH 访问 A

解决方案2

在 A 机器上做到 B 机器的反向代理;在 B 机器上做正向代理本地端口转发。

环境需求

  • 每台机器上都需要 SSH 客户端

  • A、B 两台机器上需要 SSH 服务器端。通常是 openssh-server。

    在 Ubuntu 上安装过程为

    sudo apt-get install openssl-server
    

在这里插入图片描述

实施步骤

  1. 建立 A 机器到 B 机器的反向代理【A 机器上操作】

    ssh -fCNR <port_b1>:localhost:22 usr_b@B.B.B.B
    

    port_b1 为 B 机器上端口,用来与 A 机器上的22端口绑定。

    https://www.jianshu.com/p/50c4160e62ac

  2. 建立 B 机器上的正向代理,用作本地转发。做这一步是因为绑定后的 端口只支持本地访问【B 机器上操作】

    ssh -fCNL "*:<port_b2>:localhost:<port_b1>' localhost
    

    为本地转发端口,用以和外网通信,并将数据转发到,实现可以从其他机器访问。

    其中的*表示接受来自任意机器的访问。

    • 本地端口转发:

    https://www.jianshu.com/p/50c4160e62ac

    在本地(运行命令的机器上)起一个监听端口,把所有对该本地端口的访问转发到服务器。命令行格式为:

    $ ssh -L <local-port-to-listen>:<remote-host>:<remote-port> <sshserver>
        
    <local-port-to-listen> 本地端口,也就是命令运行的机器的端口。
    <remote-host>:<remote-port> 目标机器和端口,是真正提供服务(真正要访问的服务)的端口。
    <sshserver> ssh服务器,是提供端口转发功能的服务器。
    
    这个命令的功能就是把"本地机器:<local-port-to-listen>"映射到内网"<remote-host>:<remote-port>",这个功能通过sshserver实现。
    
  3. 现在在 C 机器上可以通过 B 机器 ssh 到 A 机器

    ssh -p <portb2> usra@B.B.B.B
    

至此方案完成。

SSH 参数解释

-f 后台运行
-C 允许压缩数据
-N 不执行任何命令
-R 将端口绑定到远程服务器,反向代理
-L 将端口绑定到本地客户端,正向代理
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值