内网主机从外面连接不了?SSH反向隧道来帮你!
现在我们有一台内网主机 A,在局域网内是可以访问的,但是如果我们现在不处在局域网内,可以选择 *** 连接,但这样其实并不太方便,所以本节我们来说明一下利用 SSH 反向隧道来实现访问内网主机的方法。
准备
首先我们需要有一台公网主机作为跳板,这台主机是可以公网访问的,我们将其命名为 B,它的 IP 假设为 10.10.10.10。
所以两台机器网络配置如下:
A 内网机器
IP:192.168.1.2
SSH端口: 22
用户名:usera
密码:passworda
内网配置端口:22(即配置 SSH 端口的反向隧道)
B 公网机器
IP:10.10.10.10
SSH端口: 22
用户名:userb
密码:passwordb
公网端口:22001(即用 B 的 22001 端口连到 A 的 SSH 22 端口)
配置SSH秘钥
首先我们需要在 A 主机上生成 SSH 秘钥,和 B 用 SSH 建立认证。
首先在主机 A 上执行如下命令生成 SSH 秘钥:
ssh-keygen -t rsa -C "your@email.com"
命令里面的邮箱需要自行更换。
然后利用如下命令将 A 的 SSH 秘钥添加到 B 的 authorized_keys 里面:
ssh-copy-id userb@10.10.10.10
执行后会提示输入主机 B 的密码,执行完毕之后,我们登录到 B,就发现 authorized_keys 里面就多了 A 的 SSH 公钥了,成功建立 SSH 认证。
B 主机配置
B 主机需要更改 /etc/ssh/sshd_config 文件,修改如下一行:
GatewayPorts yes
这样可以把监听的端口绑定到任意IP 0.0.0.0上,否则只有本机 127.0.0.1 可以访问。
然后重启 sshd 服务:
sudo service sshd restart
A 主机配置
主机 A 再安装一个 AutoSSH,以 Ubuntu 为例,命令如下:
sudo apt-get install autossh
然后执行如下命令即可完成反向 SSH 配置:
autossh -M 55555 -NfR 0.0.0.0:22001:localhost:22 userb@10.10.10.10
这里 -M 后面任意填写一个可用端口即可,-N 代表只建立连接,不打开shell ,-f 代表建立成功后在后台运行,-R 代表指定端口映射。
这里是将 A 主机的 22 端口映射到 B 主机的 22001 端口,这样就完成了配置。
主要我们再访问 B 主机的 22001 端口,就会自动转发到 A 主机的 22 端口了,即可以公网访问了。
连接测试
接下来 SSH 测试连接 A 主机即可:
ssh usera@10.10.10.10 -p 22001
输入密码,完成连接。
更多相关文章
- centos 7 修改主机名
- 使用Nginx 代理应用服务的端口,以及ssh连接系统,连接mysql pgsql
- VMware虚拟机怎么设置使主机和虚拟机不同IP
- 利用端口扫描进行终端合规性检查的一个示例
- php怎么改端口
- 宿主机nginx与docker的PHP搭配使用
- Docker服务开放了这个端口,服务器分分钟变肉机!