自学内容网 自学内容网

ssh如何实现端口转发

SSH 可以通过端口转发(SSH Tunneling)实现将本地或远程的端口映射到另一台机器的端口。这通常用于在不直接暴露端口的情况下,通过 SSH 隧道访问某些资源。SSH 支持三种类型的端口转发:本地端口转发远程端口转发动态端口转发。下面详细介绍这三种方式:


1. 本地端口转发(Local Port Forwarding)

本地端口转发允许你将本地计算机的某个端口通过 SSH 隧道转发到远程服务器上的指定端口。常用于通过堡垒机访问内部网络中的服务。

语法:
ssh -L [本地端口]:[目标地址]:[目标端口] [用户名]@[远程服务器]
示例:

假设你需要通过 SSH 访问内部网络中的 10.10.101.88:8080,但你只能通过 SSH 登录到堡垒机 bastion_host。你可以在本地创建一个端口转发,通过本地的 8080 端口访问内部服务。

ssh -L 8080:10.10.101.88:8080 your_username@bastion_host

解释:

  • -L 8080:10.10.101.88:8080:将本地的 8080 端口转发到堡垒机可访问的 10.10.101.88:8080
  • your_username@bastion_host:SSH 登录到堡垒机。

完成后,你可以通过本地的 http://localhost:8080 访问 10.10.101.88:8080 的服务。


2. 远程端口转发(Remote Port Forwarding)

远程端口转发允许你将远程服务器的某个端口转发到本地计算机或其他机器上的某个端口。这种方式常用于让远程机器访问本地的服务。

语法:
ssh -R [远程端口]:[目标地址]:[目标端口] [用户名]@[远程服务器]
示例:

假设你想将你本地的 Web 服务器(本地的 8080 端口)暴露给远程服务器 remote_host,使得 remote_host 上的用户可以通过访问 localhost:8080 来使用你本地的服务。

ssh -R 8080:localhost:8080 your_username@remote_host

解释:

  • -R 8080:localhost:8080:将远程服务器的 8080 端口转发到本地的 8080 端口。
  • your_username@remote_host:SSH 登录到远程服务器。

这样,remote_host 上的用户可以通过访问 http://localhost:8080 访问你本地的服务。


3. 动态端口转发(Dynamic Port Forwarding)

动态端口转发类似于本地端口转发,但它提供了更多灵活性,可以通过 SOCKS 代理将任何请求转发到指定的服务器。这种方式常用于建立代理服务器。

语法:
ssh -D [本地端口] [用户名]@[远程服务器]
示例:

假设你想通过远程服务器 remote_host 建立一个 SOCKS 代理,允许通过该代理访问多个目标服务器。可以使用如下命令:

ssh -D 1080 your_username@remote_host

解释:

  • -D 1080:在本地启动一个 SOCKS 代理服务器,监听 1080 端口。
  • your_username@remote_host:SSH 登录到远程服务器。

完成后,配置浏览器或其他工具使用 localhost:1080 作为 SOCKS 代理,你就可以通过该代理访问远程服务器所能访问的所有资源。


常用选项:

  • -N:只建立连接,不执行远程命令,适用于仅需要端口转发的场景。
    ssh -N -L 8080:10.10.101.88:8080 your_username@bastion_host
  • -f:将 SSH 进程放入后台运行,适用于长时间运行的端口转发。
    ssh -f -N -L 8080:10.10.101.88:8080 your_username@bastion_host

总结:

  • 本地端口转发:将本地端口转发到远程服务器的端口,适合通过中间主机访问远程服务。
  • 远程端口转发:将远程服务器的端口转发到本地或另一台主机的端口,适合让远程服务器访问本地资源。
  • 动态端口转发:通过 SOCKS 代理灵活地访问远程服务器上的资源,适合建立一个代理服务。

原文地址:https://blog.csdn.net/LONG_Yi_1994/article/details/142430748

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!