反向ssh代理远程访问处于内网的电脑

本文来自我的网站-跨时代的jay

本文介绍一种远程访问本地电脑的一种方法

利用ssh反向代理

以一台处于公网的服务器作为媒介

从公网服务器上实现远程访问处于局域网的本地电脑

应用场景

访问处于局域网下的本地电脑

我们知道

本地电脑没有公网ip

无法实现远程访问

但在同一局域网下

是可以访问的

但是这样局限性比较大

当你出门在外却想要访问处在寝室的本地电脑时

这时如果该怎么办

实现远程访问

要求

有一台处于公网的服务器

作用:访问本地电脑的媒介

配置

在处于局域网下的本机电脑执行命令

建议在root用户下

$ ssh -NCfR 1111:localhost:22 username@IP -p 22

解释

-f 在后台执行

-N 不实际连接而是做port forwarding

-R 做反向ssh

将公网服务器A的1111端口映射成连接内网服务器与该公网服务器的反向ssh的端口22。

username是你登录公网服务器的用户名,IP为服务器的公网ip

然后输入登录服务器A的密码即可

修改公网机器A的SSH配置文件/etc/ssh/sshd_config

添加

GatewayPorts yes

这样可以把监听的端口绑定到任意IP 0.0.0.0上

否则只有本机127.0.0.1可以访问

服务器开启对应端口的防火墙

使用端口1111去映射本地端口22

那么服务器的端口1111肯定是要开启的

初步远程登录

首先在任何一台机器上登录公网服务器

windows上同样可以使用 cmd登录

$ ssh root@公网ip
$ ssh  本地登录用户名@localhost -p 1111

这个端口号可以随意设置

不要和其他一些默认的端口号一样就可以

问题

每次登录都需要密码

可以创建密匙

实现ssl免密登录

ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
#-t 指定类型,-f指定文件生成路径,-P指定文件密码(''表示无密码)
ssh-copy-id -i .ssh/id_rsa.pub username@IP
# 这里的username为公网服务器的登录名

这种反向代理不稳定

使用autossh建立稳定隧道

注意:此前提是可以本地可以免密登录服务器

$  apt-get install autossh
# 我的本机是ubuntu
# 如果是centos 
#使用命令 $ yum install autossh
$ autossh -M 8888 -NCfR 1111:localhost:22 -o ServerAliveInterval=60 公网服务器登录名@公网ip -p 22

有可能长时间没有操作

会断开

用autossh 自动重连

我们用一个端口8888去监听

并且用-o ServerAliveInterval=60

每隔60秒去操作一下(比较接地气的说法)

每次开机后都要重新输入命令

可以写一个脚本

开机自启

这样就比较完美了

我的微信公众号:跨时代的jay

关注我哦,定时推送知识

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容