ssh远程端口转发

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端口(安全组有入站规则和出站规则,手动添加一条入站规则和出站规则)。

ssh远程端口转发_第1张图片

要实现的目的:

个人电脑能访问内网电脑C

ssh远程端口转发_第2张图片

操作步骤:

1.在内网电脑C上,执行下面的命令,自己的22端口,转发到服务器B的422端口上。

格式: ssh -NCfR 0.0.0.0:服务器B开放的某个端口(自定义端口,比如322):连接时用到的地址(比如localhost):要转发的端口(比如要转发内网主机C的22端口) root@服务器B的IP地址

ssh -NCfR 0.0.0.0: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

ssh远程端口转发_第3张图片

到这里已经完成了把内网主机C的端口转发到外网服务器B了。

3.为了在外网任意地方。都能通过公网IP访问内网主机C,需要修改服务器B的ssh配置文件。实现方法

修改服务器B的ssh配置文件

vim /etc/ssh/sshd_config

#修改以下属性 GatewayPorts yes

然后按esc退到命令行模式。按:wq保存退出。

然后重启服务器B的ssh

systemctl restart ssh

4.查看进程,kill了这个进程就不能继续连了。为了持久化的连接。进行下面的操作

1.设置免密登录服务器B:

生成ssh秘钥:ssh-keygen 回车->回车 生成秘钥 复制秘钥到服务器B ssh-copy-id -i id_rsa.pub [email protected]

2. 添加定时任务crontab

crontab -e 打开编辑框,插入下面的代码:意思是2分钟一次执行这个任务

*/2 * * * * ssh -fCNR 422:localhost:22 [email protected]

ssh远程端口转发_第4张图片

在内网主机C上执行crontab -e 然后编辑下面的内容,保存。

ssh远程端口转发_第5张图片

你可能感兴趣的:(linux,服务器,ssh)