• SSH -R 反向端口转发---通过一台阿里云的服务器来访问公司内部网络种的电脑


    原文:https://blog.csdn.net/autoliuweijie/article/details/80283689

    -----------------------------------------------------

    SSH -R 反向端口转发

    摘自:https://abcdabcd987.com/ssh/

    反向端口转发:例子1

    相信很多人都会有这样的需求:我实验室的机器和宿舍的机器都处在局域网中,但我需要在宿舍访问实验室的机器,或者反过来。这个时候,你需要一台处在公网的机器,如果没有的话,可以考虑腾讯云或者阿里云的学生优惠。

    假设现在你有一台处在公网的机器 jumpbox,这台机器是在任何地方都能访问到的;你在实验室也有一台机子 lab,这台机子只能在实验室内部访问,但他可以访问公网,你希望能在任何地方都能访问这台机器。使用 ssh -R 可以轻松地做到这个事情。

    lab$ ssh -R 10022:localhost:22 jumpbox
    jumpbox$ ssh user@localhost -p 10022
    lab$ 
    
    • 1
    • 2
    • 3

    如果上面这个过程成功了,就说明在你执行 ssh -R 10022:localhost:22 jumpbox 之后,你成功地将 lab 上的 22 端口反向转发到了 jumpbox 的 10022 端口。只要保持这个 ssh 不断,任何一台机器都可以首先连接到 jumpbox,然后通过 ssh user@localhost -p 10022 连回到 lab。可以看到,这里 jumpbox 起到了一个跳板的作用,所以我们把它称作跳板机。

    不过上面这么做并不稳健,如果因为网络波动导致 ssh -R 那个连接断了,那么从 jumpbox 就完全失去了到 lab 的控制。万幸的是,有一个叫做 autossh 的软件,可以自动的检测断线,并在断线的时候重连。在 Ubuntu 上你可以使用 sudo apt-get install autossh 来安装,在 Mac 上则是 brew install autossh。

    lab$ autossh -NfR 10022:localhost:22 jumpbox
    
    • 1

    上面这句话里面 -N 表示非不执行命令,只做端口转发;-f 表示在后台运行,也就是说,这句话执行之后 autossh 就在后台默默工作啦;-R 10022:localhost:22 就是把本地的22端口转发到远程的10022端口。

    现在,任何一台电脑先连上跳板机,就可以连回内网的机子啦!

    你甚至可以将这句话设置为开机时运行:在 /etc/rc.local 里面 exit 0 这句话之前加上

    su - user -c autossh -NfR 10022:localhost:22 jumpbox
    
    • 1

    其中 user 是你的用户名。需要注意的是,如果你需要开机时运行 autossh,你需要配置公钥登入,因为开机运行的时候是没有交互界面让你来输入密码的。

    这里顺带说一句,你可以绑定1024到65535之间的任意端口,只要这个端口之前没有程序在用就行。

    反向端口转发:例子2

    还是反向端口转发,再举一个很常见的例子:我在本地跑了一个网站,我想临时把我的网站发给朋友看看。你可以很容易的复现这个实验:在本地运行 python -m SimpleHTTPServer 即可在本地的8000端口启动一个网站,你可以在浏览器中通过 http://localhost:8000/看到。下面我们想让远方的朋友看到这个网站。

    local$ ssh -NR 0.0.0.0:18000:localhost:8000 jumpbox
    
    • 1

    远方的朋友即可通过 http://jumpbox:18000/ 看到了。注意到这里和上面的命令有一个小小的不同,就是多了 0.0.0.0,这告诉 ssh,要把18000端口绑定在远端的所有IP上。如果像之前那样省略的话,缺省值是只绑定在 localhost,也就是只有在 jumpbox 本机才可以访问,而其他人都不能访问。

    反向端口转发:例子3

    比方说在本地的127.0.0.1:1080运行了HTTP代理服务,现在我想让另一台机子 remote 也能够使用这个HTTP代理。

    local$ ssh -NR 11080:localhost:1080 remote
    local$ ssh remote
    remote$ export http_proxy=http://127.0.0.1:11080/
    remote$ export https_proxy=http://127.0.0.1:11080/
    remote$ curl http://ifconfig.co
    
    • 1
    • 2
    • 3
    • 4
    • 5

    看看返回的IP,是不是 remote 也用上了代理?

  • 相关阅读:
    夺命雷公狗jquery---4内容选择器
    夺命雷公狗jquery---3普通选择器
    夺命雷公狗jquery---2层级选择器
    夺命雷公狗jquery---1选择元素的3种方法
    Java 基本类型相互转换
    java 数据类型与基本编码
    语言学习
    JAVA SE 基础复习-面向对象 异常机制
    奶牛问题
    JAVA SE 基础复习-IO与序列化(3)
  • 原文地址:https://www.cnblogs.com/oxspirt/p/12250952.html
Copyright © 2020-2023  润新知