0.背景

家里的电脑一般都是买的移动电信这些运营商的帐号,用pppoe的方式上网的,这种情况的话我们是没有公网ip的,也就是说我们的电脑是位于一个局域网里面的,所以我们是无法直接远程连接到我们的电脑的。
为了实现远程连接到内网的电脑,我准备使用ssh反向连接来实现。

1. 环境介绍

主机A:内网电脑,这里我的系统是linux,用户名假设为test
主机B:有公网ip的设备,可以直接买一个vps,ip假设为10.x.x.x,用户名假设为UserB
主机C:远程设备,比如手机、办公室电脑等
注意:
上面所有的主机都要安装ssh服务

2. 配置远程登录用户

在主机A安装好ssh服务后,需要配置一个允许使用ssh远程登录的用户,这里为了安全起见,建议新建一个用户专门用来远程登录。

1. 创建用户

使用adduser命令可以自动创建一个新用户:

sudo adduser

根据提示输入用户登录密码以及相关信息即可:
在这里插入图片描述
如上图所示,创建了一个test用户,可以使用su test 测试一下用户能不能登入

2. 配置用户的sudo权限

为了安全起见,远程登录用户不应该有全部的sudo权限,这里可以通过配置sudo配置文件实现,默认位置在/etc/sudoers:
在这里插入图片描述
如上图所示,userA是我本地登录电脑的用户,test是我准备用来远程登录的用户,这里我的userA是有root的全部权限的(使用sudo命令),而我远程登录的用户只是想修改一些userA的文件,所以只配置了userA的权限,使用sudo命令的话需要加上-u userA才可以使用sudo:
在这里插入图片描述
大家根据自己远程连接的需要做修改即可,关于sudoer配置文件的详细解释可以参考如下连接:
https://www.doc88.com/p-731455814861.html?r=1

3. 配置ssh配置文件

linux下ssh的配置文件默认位置在 /etc/ssh/sshd_config,打开该文件搜索AllowUsers字段,如果没有就手动添加,如下图:在这里插入图片描述
AllowUsers test,这样就可以使用test用户远程ssh登录啦

ssh反向连接

主机A配置好之后,使用ssh命令反向链接到主机B,命令如下:

ssh -fCNR  <port1>:localhost:<sshd服务port,默认为22> userB@10.x.x.x 

执行成功后,会在userB监听port1端口,并把port1端口的消息转到UserA的ssh服务端口(默认为22)
下一步登入主机B,在主机B中输入如下命令:

ssh test@127.0.0.1 -p <port1>

即可以test用户的身份接入主机A啦

改进

通过上述步骤,我们可以在主机C通过远程接入到主机B,然后在主机B里使用ssh命令接入到主机A。不过这样有个问题,就是主机A的ssh反向链接如果异常中断了,需要手动输入密码才能重新建连,所以参考如下博客,在主机A上启动了一个进程监视脚步,如果ssh服务断了会使用密钥认证自动重连,不需要人亲自去主机A输密码:
https://www.cnblogs.com/x_wukong/p/5997872.html
还有一点,就是现在需要先连接主机B,再连接主机A,两步有点麻烦,这里可以在主机B上再建立一个ssh正向连接,监听一个port2端口:

ssh -fCNL  *:<port2>:localhost:<port1> userB@127.0.0.1

注意:这里的port1必须跟主机A反向连接监听的端口一致,port2可以随便选一个空闲端口

这样我们就可以直接在主机C上使用ssh命令登入主机A:

ssh test@10.x.x.x -p <port2>

注意,test是主机A的远程登陆用户名,10.x.x.x是主机B的公网ip

Have fun~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐