ssh远程转发的原理:内网主机开了一个程序去连接外网的服务器,一直等待外网的服务器来连接。
应用场景
设备 | IP | 备注 | 系统 |
内网电脑C | 192.168.10.129 | 内网,可访问外网。SSH登陆端口为22。 | linux |
个人电脑A | 动态变化 | 无公网IP | Linux、win、macOS |
服务器B | 47.101.62.89 | 有公网IP | Linux |
做这个实验的时候,我用阿里云开了一台按量付费的服务器B(大概1个小时左右0.1元,开一个小时就删了这个服务器),注意服务器B额外开放了322端口,需要在安全组里面放通322端口。
要实现的目的:
个人电脑能访问内网电脑C
操作步骤:
1.在内网电脑C上,执行下面的命令,自己的22端口,转发到服务器B的422端口上。
格式: ssh -NCfR 服务器B开放的某个端口(自定义端口,比如322):连接时用到的地址(比如localhost):要转发的端口(比如要转发内网主机C的22端口) root@服务器B的IP地址
ssh -NCfR 322:localhost:22 root@47.101.62.89(公网IP)
PS:经过我的测试localhost那个位置,用其他的不行,就要用localhost
# -f : 表示SSH连接在后台运行
# -C : 表示压缩数据传输
# -N : 用于端口转发,表示建立的SSH只用于端口转发,不能执行远程命令
# -R : 指定远程端口转发
如下图:转发操作:
2.在服务器B上,测试远程连接内网电脑C,执行如下命令,然后输入内网电脑C的密码
ssh root@localhost -p 322
到这里已经完成了把内网主机C的端口转发到外网服务器B了。
3.查看进程,kill了这个进程就不能继续连了。为了持久化的连接。进行下面的操作
1.设置免密登录服务器B:
生成ssh秘钥:ssh-keygen 回车->回车 生成秘钥 复制秘钥到服务器B ssh-copy-id -i id_rsa.pub root@47.101.62.89
2. 添加定时任务crontab
crontab -e 打开编辑框,插入下面的代码:意思是2分钟一次执行这个任务
*/2 * * * * ssh -fCNR 422:localhost:22 root@47.101.62.89
在内网主机C上执行crontab -e 然后编辑下面的内容,保存。