美文网首页
SSH 反向隧道实现服务器内网穿透

SSH 反向隧道实现服务器内网穿透

作者: BeeBee生信 | 来源:发表于2020-10-10 15:24 被阅读0次

    最近在单位购置了一台小服务器,但是回到家就不能用了,太影响我加班了!用 SSH 反向隧道可以实现穿透内网访问服务器,基本原理是有一台在公网可以访问的机器,下面称为外网机器,在我这里是我以前在阿里云买的 ECS 实例(也即一个小服务器,通过 IP 可以直接连接)。首先内网服务器用 SSH 建立到外网机器的连接,然后通过这个连接反过来转发来自外网机器的 SSH. 可以想象成内网的服务器先开一根大水管连接到外网机器,然后在这跟大水管内装一个小水管,让外网机器连接内网服务器。看看步骤就懂啦,很容易的几步就实现了。

    在外网机器启动 sshd 服务

    systemctl start sshd
    

    在内网服务器建立 SSH 连接到外网机器,为了能够在 SSH 超时关闭后,自动重新建立连接,使用 autossh 软件。

    sudo apt-get install -y autossh
    

    为了让 autossh 在后台运行需要 -f 参数,但这个参数会导致调用 ssh 命令前直接进入后台模式,所以无法输入密码进行验证。因此可以采用的方法是在内网服务器产生 SSH 密钥,然后把公钥拷贝到外网机器,拷贝用 ssh-copy-id 命令完成;也可以手动拷贝,手动的方法是在内网服务器 ssh-keygen 命令产生密钥后将 ~/.ssh/id_rsa.pub 内容写入外网机器 ~/.ssh/authorized_keys 文件。

    公钥配置完成后进行 autossh 建立反向隧道。

    autossh -M 34044 -fNR 34043:localhost:22 pengguoyu@39.108.164.158
    

    这里 -R 表示监听外网机器 34043 端口并转发到本服务器 22 端口。-Mautossh 监听端口,要保证这个端口和这个端口加一的端口 34045 是没被占用的,用 -f 后台运行的话也要指定 -N 否则 autossh 会退出。

    这样就完成了,从此可以在外网机器通过 ssh 访问内网服务器,在我这里是。

    ssh -p 34043 localhost
    

    可以把轮询时间的变量 AUTOSSH_POLL 设小一点,比如。

    echo "export AUTOSSH_POLL=60" >> ~/.bashrc
    source ~/.bashrc
    

    查看常用端口网址:List of TCP and UDP port numbers - Wikipedia
    请避开这些端口。

    参考资料

    What Is Reverse SSH Tunneling? (and How to Use It)
    使用SSH反向隧道进行内网穿透 | 河 的 第 三 条 岸
    autossh_README

    相关文章

      网友评论

          本文标题:SSH 反向隧道实现服务器内网穿透

          本文链接:https://www.haomeiwen.com/subject/lucjpktx.html