博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】SSH 可以将本地的某个端口映射到远程服务器的某个端口上,也可以将远程服务器的某个端口映射到本地的某个端口上。
本地端口转发,如下图所示:
场景:外部主机 A 可以直接访问内部主机 B,但不能直接访问内部主机 C;主机 B 可以访问主机 C。目的实现外部主机 A、D 访问内部主机 C。
本地端口转发是在 ssh-client 端建立侦听端口 3307 ,访问 ssh-client 侦听端口 3307 的将 tcp 数据包通过 ssh 隧道发往 ssh-server 端,ssh-server 端收到 tcp 数据包后,再与指定的目标 ip 端口(主机 C:192.68.1.10:3306)建立新的 tcp 连接并转发数据。换句话说,就是在 192.168.10.33 这台机子上侦听 3307 端口,设置 ssh-server 端将 tcp 数据包发送到 192.68.1.10:3306 端口。
命令示例(主机 A 上执行):
ssh -g -L 3307:192.68.1.10:3306 root@192.168.1.18
本地端口转发命令格式如下:
ssh -L [-g] <local-port-to-listen>:<remote-host>:<remote-host-port> <sshserver>
<local-port-to-listen> 本地端口,即 ssh-client 机子的端口
<remote-host>:<remote-host-port> 目标机器和端口,即真正提供服务的端口
<sshserver> ssh 服务器,即提供端口转发功能的服务器
远程端口转发,如下图所示:
场景:外部主机 A 不能直接访问内部主机 B、C;而内部主机 B 可以访问外部主机 A 与内部主机 C 。目的实现外部主机 A、D 访问内部主机 C。
远程端口转发是在 ssh-server 端建立侦听端口 8080(主机 A), 若有访问,则加密后通过 ssh 隧道转发 "请求" 到 ssh-client 端,ssh-client 端收到数据包后转发 "请求" 到 192.168.1.10:80 端口。
命令示例(主机 B 上执行):ssh -R 8080:192.68.1.10:80 root@192.168.1.33
执行上面的命令以后,主机 B 到主机 A 的 SSH 隧道已经建立了,就可以从主机 A 就能访问主机 C 了,即在主机 A 上执行:curl http://127.0.0.1:8080 就是访问主机 C 的 80 端口(192.168.1.10:80)。
远程端口转发命令格式:
ssh -R <ssh-server-port-to-listen>:<remote-host>:<remote-host-port> <sshserver>
即把所有对 <sshserver>:<ssh-server-port-to-listen> 的请求都转发到 <remote-host>:<remote-host-port>上去。
注意:
(1)如果不是以 root 身份设置端口转发的话,转发端口号只能使用大于 1024 的端口号(1024 内的端口属于静态端口);
(2)SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据;
(3)侦听的端口必须是没有被其它程序占用,可以使用 telnet 来检测端口是否开启,命令:telnet IP 端口 或者 telnet 域名 端口。
版权归 马富天个人博客 所有
本文标题:《SSH 本地端口转发和远程端口转发》
本文链接地址:http://www.mafutian.com/426.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶1
踩0
评论审核未开启 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
||