SSH端口转发——本地转发
- 背景:企业内部服务器C(192.168.0.3)不允许外部直接访问,服务器B(192.168.0.2)是一个ssh服务器,有一个用户A(192.168.0.1)需要从外部连接到企业内部的C服务器。
- 原理:用户A通过ssh协议连接到B机器上,再通过B机器做跳板,连接至C机器。
- 图示如下:
我们需要连接C机器的3306端口 命令如下
ssh -Nf -L 18080:192.168.0.3:3306 root@192.168.0.2 -p 22
执行上面命令后我们就可以通过 访问本地的18080就可以连接到C机器的3306端口了
如果我们想要停止这个隧道,直接把后台的隧道进程杀死就可以了,命令如下:
- linux 关闭进程
#获取ssh的进程: [root@192.168.0.1 ~]# ps -ef | grep ssh root 940 1 0 09:50 ? 00:00:00 /usr/sbin/sshd -D root 1184 940 0 09:50 ? 00:00:00 sshd: root@pts/0 root 2922 1 0 14:53 ? 00:00:00 ssh -Nf -L 18080:192.168.0.3:3306 root@192.168.0.2 -p 22 root 2954 2877 0 15:06 pts/0 00:00:00 grep --color=auto ssh # 关闭进程: [root@121 ~]# kill -9 2922
- windows 关闭进程
获取进程 netstat -ano |findstr "18080" #例如上面查出的pid为1234 执行下面命令 taskkill /f /pid 1234
SSH端口转发——远程转发
如果本机服务器无法直接连接中转服务器和目标服务器,因为加了防火墙我们是无法直接连接,因为在现实生活中,企业处于安全考虑,一般只允许出不允许进,这时候我们就可以让本地服务器充当服务端,中转服务当作客户端主动去连接本机服务器。
需要在B服务器输入命令建立通信隧道
ssh -R -fN 2222:192.168.0.3:22 root@192.168.0.1 -p 22
然后在服务器A(192.168.0.1)上输入以下命令,顺利连接到服务器C(192.168.0.3):
ssh 127.0.0.1 -p 2222
总结
- 本地机器不能访问远程机器,中间机器可以访问远程机器,本地机器可以ssh登录到中间机器,这种情况下可以使用本地转发。
- 本地服务器不能访问远程,但中间机器可以访问这两个远程机器,这个情况用远程转发。