欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ubuntu反向隧道搭建,实现SSH外网连接内网

程序员文章站 2022-05-26 16:28:21
...

参考:崔大神


准备

一台内网机器 A

  • IP:192.168.10.128
  • SSH端口: 22
  • 用户名:a
  • 密码:passworda
  • 内网配置端口:22(即配置 SSH 端口的反向隧道)

带有公网ip的机器 B

  • IP:111.123.123.123
  • SSH端口: 22
  • 用户名:b
  • 密码:passwordb
  • 公网端口:22001(即用 B 的 22001 端口连到 A 的 SSH 22 端口)

配置SSH**

注意分清A、B,A是内网,B是公网。在 A 主机上生成 SSH 秘钥,和 B 用 SSH 建立认证。

A的配置(内网主机)

ssh-****** -t rsa -C "aaa@qq.com"

邮箱要换成你自己的,直接用下面这个也行,都是默认的

ssh-******

ubuntu反向隧道搭建,实现SSH外网连接内网
直接连按3次enter就可以了,什么都不用输入,**自动保存在默认的地方,方便下一步操作。
你会获得一长串SHA256:......注意不要清屏了,这个等下有用

然后利用如下命令将 A 的 SSH 秘钥即SHA256:......里面的字符串,添加到 B 的 authorized_keys 里面:

ssh-copy-id aaa@qq.com111.123.123.123

注意换成你自己的ip,执行后会提示输入主机 B 的密码,执行完毕之后,我们登录到 B,就发现 authorized_keys 里面就多了 A 的 SSH 公钥了,成功建立 SSH 认证。
这个步骤主要是完成了从机子A到Bssh的免密登录,具体可以看~/.ssh/下面的一些**更改情况
ubuntu反向隧道搭建,实现SSH外网连接内网

B的配置(公网主机)

只需要微微改一下配置

sudo vi /etc/ssh/sshd_config

添加

GatewayPorts yes

这句话的意思是监听端口可以绑定到任意其他ip,不然只有本机127.0.0.1可以访问
重启一下ssdh服务

sudo service sshd restart

A的配置(内网主机)

弄好了上面的,再回到A,安装一个autossh,注意,这个东西ubuntu安装比较方便,我在centos试了一下,似乎不能直接用命令安装了,要去网上下,比较麻烦。
ubuntu为例,执行下面命令完成安装

sudo apt-get install autossh

开启autossh

autossh -M 22002 -NfR 0.0.0.0:22001:localhost:22 b@111.123.123.123

注意最后一个ip,是公网ip

这里 -M 后面任意填写一个可用端口即可,-N 代表只建立连接,不打开shell ,-f 代表建立成功后在后台运行,-R 代表指定端口映射。
这里是将 A 主机的 22 端口映射到 B 主机的 22001 端口,这样就完成了配置。
主要我们再访问 B 主机的 22001 端口,就会自动转发到 A 主机的 22 端口了,即可以公网访问了。

另外再提醒一下,如果是一些供应商的云主机,记得要去安全策略组那里开放22002、22001两个端口,不然怎么样都是访问不了的。


连接测试

ssh a@111.123.123.123 -p 22001

输入内网主机a的密码,这时候你就会惊奇地发现已经打开了内网主机。

另外,为了方便,可以考虑将autossh设置为开机启动后
ubuntu为例,因为不同机器的开机启动文件稍有差异,具体哪个请自查

sudo vi /etc/rc.local

添加下面这行代码

autossh -M 22002 -NfR 0.0.0.0:22001:localhost:22 aaa@qq.com

ok,这次实验到此为止,来源请翻到头顶。


更换内网主机

这个内网主机a2的设置首先按上面重复一遍
然后回到公网主机b,关掉前面的监听端口

sudo netstat -tunlp|grep 22001

看到的记录中有 23630/sshd: b

kill -9 23630

然后回到a2,开启

autossh -M 22002 -NfR 0.0.0.0:22001:localhost:22 aaa@qq.com

反正要kill掉,不然不管怎么弄,ssh到的都是原来的a主机。
或者换个端口号也可以。


问题

机器重启后,autossh会以root身份运行,如果一开始不是用root帐号弄的,会有问题。

相关标签: ssh 隧道