借助公有云服务器内网穿墙ssh访问内网服务器

做内网需要用的Linux服务器(A)ubuntu系统,只分配了内网IP,可以连接外网(通过手机热点wifi或者有线网口),没有办法设置路由器。

A的用户名:nameA@192.168.109.11,

现在用家里的电脑C通过ssh连接到A上,当然有TeamViewer,向日葵等桌面连接软件,但传输画面比较卡,故想ssh连接。网络上有花生壳、net123等提供穿墙服务,可以实现ssh,但都比较贵。

自己在腾讯云上申请了虚拟服务器B,A、C可以通过B直接实现访问。具体过程如下:

step1:申请腾讯云服务器 https://cloud.tencent.com/act/seckill?from=13338

           买了一个99元一年的虚拟服务器。

           用户名 ubuntu,端口22,IP:123.123.123.123,密码

           在个人电脑C上可以通过ssh终端实现访问

           ssh -p 22 ubuntu@123.123.123.123  

step2:配置云服务器B,使其端口访问开放

            1>.修改B服务器的sshd设置        #vi  /etc/ssh/sshd_config

            2>把GatewayPorts打开(去掉前面的#号注释):  GatewayPorts yes

           3>存盘后退出,并重新启动sshd ,#service sshd restart

step3: 配置内网服务器A,建立A到B的ssh方向代理,使用autossh实现更好,在A上操作,参考https://www.cnblogs.com/kwongtai/p/6903420.html          

          建立A机器到B机器的反向代理,具体指令为

          1>安装autossh, sudo apt install autossh

          2>B到A的ssh代理命令,需要输入

  

ssh -fCNR 7290:localhost:22 ubuntu@123.123.123.123
autossh -M 7291 -fCNR 7290:localhost:22 ubuntu@123.123.123.123 

    autossh的参数与ssh的参数是一致的,但是不同的是,在隧道断开的时候,autossh会自动重新连接而ssh不会。另外不同的是我们需要指出的-M参数,这个参数指定一个端口,这个端口是外网的B机器用来接收内网A机器的信息,如果隧道不正常而返回给A机器让他实现重新连接。

 step4:建立从B到A的ssh正向代理,在B上操作          

            建立B机器的正向代理,用来做转发,具体指令为

ssh -fCNL [A机器IP或省略]:[A机器端口]:[B机器的IP]:[B机器端口] [登陆B机器的用户名@B机器的IP]

            这里的B机器的端口和上面的B机器的端口是一致的,端口1234的也是B机器的。

ssh -fCNL *:1234:localhost:7290 localhost

            在B服务器上尝试以下命令:netstat -a |grep 7290,如果有返回如下界面,则证明成功

            

             在B服务器上,执行以下命令,则能ssh访问A服务器  ,1234 为B上的端口,7290也是B的端口。      

            这一步主要实现了云服务器B上自己的端口转发,及将B的1234端口转发到B的7290端口。没有这一步,后面直接ssh -p 7290 nameA@B的IP,也是一样。        

 ssh  -p 1234  nameA@123.123.123.123    ,输入nameA在内网的密码

step5:个人电脑C测试

            完成之后就可以,实现在通过云服务器端口1234,映射到内网服务器的端口7290。

            在个人电脑C上执行以下命令,

ssh -p 1234 A的用户名@B的公网IP地址。即
ssh -p 1234 nameA@123.123.123.123,输入nameA的密码

step6:内网服务器A免密登录

           建立A到B的反向代理时需要输入密码,为此,要建立A到B的免密码ssh访问。

          1>在A操作,在A上生成密钥文件, ssh-keygen -t rsa

             将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub(如果用dsa则生成id_dsa,id_dsa.pub)

            生成位置在/home/user/.ssh/文件夹下(我用的是user用户所以在root下,生成过程会有提示文件位置),.ssh 是隐藏文件夹 使用 ls -a查看

         2>在A操作,将公钥放到服务器指定位置

             将公钥复制到云服务器B的root用户下的.ssh文件夹(用哪个用户登录就复制到哪个用户下的.ssh文件夹下)                         

              scp /home/user/.ssh/id_rsa.pub ubuntu@123.123.123.123:/home/ubuntu/.ssh/  

   3>在B操作,安装公钥

              登录到云服务器B上 cd /home/ubuntu/.ssh/

              cat id_rsa.pub >> authorized_keys

step7:实现内网服务器A开机自启反向代理。

    1>要在内网服务器A开机自启执行如下命令:autossh -M 7291 -fCNR 7290:localhost:22 ubuntu@123.123.123.123 

     A的系统是ubuntu18.04,为此,要新建/etc/rc.local,参考:https://blog.csdn.net/wuspeng/article/details/108462529

              第一步:sudo vi  /lib/systemd/system/rc.local.service,  文本末端添加以下内容

[Install]
WantedBy=multi-user.target
Alias=rc-local.service

              第二步:ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/rc.local.service

              第三步:sudo chmod 0755 /etc/rc.local

              第四步:sudo vi /etc/rc.local,添加需要的开启执行的命令/或脚本

               autossh -M 7291 -fCNR 7290:localhost:22 ubuntu@123.123.123.123 

     这个方法不稳定,发现另外一个更简单的方法。

     vim  /etc/profile ,把autossh -M 7291 -fCNR 7290:localhost:22 ubuntu@123.123.123.123,添加到最后一行,记得在行尾加上“空格”及“&”

     参考https://blog.csdn.net/weixin_42451919/article/details/88971503?spm=1001.2014.3001.5501

           2>使内网服务器A的root用户能后无密码访问,copy user下面相关密钥文件到root下面

               参考https://blog.csdn.net/xiao_huocai/article/details/103192258              

     cp /home/user/.ssh/id_rsa.pub /root/.ssh/id_rsa.pub
     cp /home/user/.ssh/id_rsa /root/.ssh/id_rsa

      

step8:重启内容内网服务器A

            ps aux |grep autossh ,看是否自动反向ssh到B

            在个人电脑C上,连接A 

            ssh  -p 1234 nameA@123.123.123.123,,输入nameA的密码,成功。

 

 

            

       

             

 

        

 

 

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值