所有【Academic】标记的文章都是工作学习过程中随手敲敲的技术相关的笔记/记录,欢迎有兴趣的大佬交流指正。
最近腿脚不方便,请了假在家办公。作为一个热爱工作的新青年
我想在家连到公司的服务器,于是先复习了一下ssh的远程端口转发功能。
01
—
场景需求
家里的、公司的电脑基本都是位于内网中,通过NAT的方式访问网络,因此外网无法主动连接到内网的电脑,内网中的电脑无法连接到另一个内网中的电脑。通过ssh的远程端口转发可以实现这个目的,需要一台具有公网IP的虚拟主机(VPS)作为中继。远程端口转发与本地端口转发类似,只不过转发的方向是相反的,这个过程叫做reversetunnel。
02
—
网络环境
中继虚拟主机(V)的公网IP:234.2.3.4
目标服务器即公司办公服务器的内网IP(T):192.168.100.1
家里本地PC的IP(A):192.168.1.1
03
—
理论上,
step1
在VPS(234.2.3.4)上修改sshd的配置/etc/ssh/sshd_config
将
#GatewayPorts no
改为
GatewayPorts yes
step2
在目标服务器 T 上(192.168.100.1)运行:
ssh -fN -R *:1993:localhost:22 root@234.2.3.4
-R表示远程端口转发。
以上命令会在中继服务器VPS上监听端口1993,
凡是发送到这个端口的tcp流量都会转发到本机(目标服务器)的22端口。
(由此可见远程端口转发与本地端口转发的区别)
step3
在家里的PC上运行
ssh -p 1993 root@234.2.3.4
就可以登录到目标服务器。
这里的root是目标服务器的用户,
因为中继服务器234.2.3.4将1993端口收到的数据转发回了目标服务器192.168.3.220的22端口。
解释一下今天会用到的各个参数:-f 后台执行ssh指令-C 允许压缩数据-N 不执行远程指令-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口-p 指定远程主机的端口
04
—
实际操作
由于我还要检查内网服务器对内的80端口(web)服务状态,以及需要用telnet对后台进行配置(无sshd),所以服务器上配置了两条,一个给httpd,一个给telnetd:
中继上由于防火墙的关系,配置了本地转发:
ssh -fN -L *:8080:localhost:19000 localhostssh -fN -L *:4321:localhost:19001 localhost
这样当我访问 http://jumphost-IP:8080 时,就通过两次转发访问了目标内网服务器的80端口;同理,telnet jumphost-IP 4321 ┑( ̄Д  ̄)┍
好的,这样一来我在家也可以好好完成领导布置的工作然后升职加薪走上人生巅峰啦啦啦~~~~~~~~~~(- -)