使用ssh+华为云服务器实现内网穿透
用 ssh 访问一台主机,如果和主机在一个局域网中或者主机拥有公网 IP,就可以使用 ssh 命令直接连接主机的 IP 地址,但是大部分公司和家庭内部都是局域网,并不能给局域网内的每一台主机都分配一个公网 IP,这时候就需要进行内网穿透,才能从外部连接到局域网内的主机。
什么是内网穿透
简单来说内网穿透就是实现不同局域网内的主机间的通信,通俗点讲,当你在宿舍写代码,想访问机房里的服务,但是机房没有外网IP,所有的web服务都是通过内网发布的(192.168.xx.xx等),那你在宿舍就无法访问到这些服务,可你又不想去机房,那么应该怎么办呢?内网穿透就可以帮你解决这个困境。通过内网穿透,你用宿舍的网络就可以访问到机房的web服务。
或者是你用宿舍的网络,可以SSH访问机房的服务器(服务器没有公网IP)。又或者时你你的闲置手机挂了个Termux,想从其他地方远程访问。
具体步骤
1.在服务器上安装ssh-server
1 2 | apt-get install openssh-server #linux云服务器默认已经安装,这里就跳过 |
2. 在客户端上连接到服务器,并进行映射
1 2 3 4 | ssh -R <server_port>:<local_ip>:<local_port> user@server_ip # ssh -R 8888:127.0.0.1:8022 chenbao@115.28.***.187 #将本地的local_ip:local_port 映射到 server 的server_port #ssh将会在服务器上监听server_por 并将消息转发到 local_ip:local_port |
这里我用我手机termux手机示范
3.检查连接状态
1 2 3 | netstat -l | grep :8888 #netstat -l | grep :server_port #可以看到服务器端已经监听了8888端口,但是监听的是localhost的8888 ,只能实现服务器本地访问 |
3.1 内部访问测试
我映射的是termux上的8022端口(ssh服务)
在服务器上用ssh连接到termux的ssh服务进行测试 , 能成功连接,说明映射成功
4.实现服务器公网访问
4.1 方案一 在服务器端建立一个正向转发
1 2 3 | #连接到服务器上 略 #建立任意ip(0.0.0.0)到 localhost(127.0.0.1) 的正向代理 ssh -L 0.0.0.0:8889:127.0.0.0.1:8888 chenbao@localhost |
1 | #再次查看连接情况 0.0 . 0.0 : 8889 已经监听,这时即可使用服务器公网ip进行访问?(你可能需要在华为云服务器控制台开放需要映射到公网的端口) |
4.2 修改sshd配置文件,为了避免与主sshd服务冲突,建议新建一个配置文件
1 2 3 4 5 6 7 8 | #将默认配置的有效项 复制到 ~/sshd_config 中 grep "^[^#]" /etc/ssh/sshd_config > ~ /sshd_config #修改~/sshd_config 更改端口,添加选项 GatewayPorts yes (允许直接映射到全局(0.0.0.0)) vim ~ /sshd_config 添加 Port 8882 GatewayPorts yes #建议注释Subsystem行 |
启动新的sshd服务
1 2 3 | /usr/sbin/sshd -f /etc/ssh/sshd_config #如果提示权限不够 就 sudo /usr/sbin/sshd -f /etc/ssh/sshd_config #如果没有找不到error: Could not load host key: /etc/ssh/ssh_host_ed25519_key 就先 ssh-keygen -A |
5.其他
5.1使客户端的ssh在后台运行
带参数 -N(不执行远程命令. 用于转发端口) -f(在执行命令前退至后台)
5.2 共享给其他人时保证安全性
1.在服务器上新建一个普通用户 onlynat
2.手写一个shell(误)
1 2 3 4 5 6 7 8 9 | #include <iostream> using std::string; using std::cin; int main() { string tmp; while (cin>>tmp); return 0 ; } |
编译上述代码,并将这个程序设置为onlynat的she'l'l
编辑~/sshd_config 添加行 AllowUsers onlynat
重启sshd_cinfig 这时 onlynat 就只能使用手写的shell,而无法执行任何命令了
- 点赞
- 收藏
- 关注作者
评论(0)