SSH 的 L 选项有什么作用?

SSH 的 L 选项有什么作用?

为了确保 VNC 安全,我应该使用这个

ssh -L 5901:127.0.0.1:5901 [email protected]

来自客户端。如果服务器显示为 1,则使用 5901;如果显示为 0,则使用 5900。此命令取自教程

该选项的描述是

-L [bind_address:]port:host:hostport

             Specifies that the given port on the local (client) host is to be
             forwarded to the given host and port on the remote side.  This
             works by allocating a socket to listen to port on the local side,
             optionally bound to the specified bind_address.  Whenever a
             connection is made to this port, the connection is forwarded over
             the secure channel, and a connection is made to host port
             hostport from the remote machine.  Port forwardings can also be
             specified in the configuration file.  IPv6 addresses can be
             specified with an alternative syntax:
             [bind_address/]port/host/hostport or by enclosing the address in
             square brackets.  Only the superuser can forward privileged
             ports.  By default, the local port is bound in accordance with
             the GatewayPorts setting.  However, an explicit bind_address may
             be used to bind the connection to a specific address.  The
             bind_address of “localhost” indicates that the listening port be
             bound for local use only, while an empty address or ‘*’ indicates
             that the port should be available from all interfaces.

ssh_config 文件描述包括这个

GatewayPorts
         Specifies whether remote hosts are allowed to connect to local
         forwarded ports.  By default, ssh(1) binds local port forwardings
         to the loopback address.  This prevents other remote hosts from
         connecting to forwarded ports.  GatewayPorts can be used to spec-
         ify that ssh should bind local port forwardings to the wildcard
         address, thus allowing remote hosts to connect to forwarded
         ports.  The argument must be ``yes'' or ``no''.  The default is
         ``no''.

请解释此命令或者绘制图表。

答案1

这只是将经过充分测试的安全性应用于不安全的 VNC 协议的一种方法。SSH 被广泛使用,它具有经过充分测试的加密协议,并且支持多种身份验证协议。VNC 只是被广泛使用,而且不如 SSH 使用得那么广泛。

SSH 的 L 选项可在 SSH 的保护下将流量从本地系统转发到远程系统。因此,如果 VNC 本身不够安全或灵活,则通过 SSH 转发 VNC 流量,您可以获得 SSH 的全部保护功能。

通过将本地主机的端口转发到远程主机,您可以确保未加密的 VNC 流量不会泄露到本地(或远程)网络上。要拦截任何此类流量,攻击者必须破解 SSH,或拥有相关系统的 root 访问权限,在这种情况下,您已经输了。

答案2

基本上,这使得 example.com 上的端口 5902 可访问,因为它在本地计算机上运行

ssh -L 5901:127.0.0.1:5902 [email protected]

运行此命令后,您可以在本地计算机 127.0.0.1:5901 上访问 example.com:5902 上运行的内容

[电子邮件保护]- 您正在连接的用户/服务器

5902 - 您要转发的目标端口

5901 - 目标端口应可访问的端口号

答案3

SSH 通常提供可在本地终端安全访问的远程 shell。带有该-L选项的命令似乎为两端的端口提供了安全隧道功能。

假设命令是

ssh -L 5901:127.0.0.1:5901 user@remoteIP

在上面的选项中有两个实例5901

在上面的选项中, 的第一个实例5901确定了作为 LOCAL HOST 的机器上的配置,这并不是说“localhost”。 LOCAL HOST 是执行命令的机器ssh。 在上面的选项中,字符串的其余部分127.0.0.1:5901确定了作为 的 REMOTE HOST 的机器上的配置remoteIP

远程主机上的应用程序可以通过 127.0.0.1:5901 访问安全隧道,其中 127.0.0.1 是明确的,因此只有同一台机器上的应用程序才可以访问隧道。

本地主机上的应用程序可以通过 127.0.0.1:5901 访问安全隧道,其中默认为 127.0.0.1。如果 GatewayPorts 为“是”,则可以*在选项中指定,表示任何主机(具有任何 IP)都可以访问安全隧道。命令的形式将是

ssh -L *:5901:127.0.0.1:5901 user@remoteIP

具有 4 个主机的图示:

App Host A <---> Host Running `ssh` <---> Host At `remoteIP` <---> App Host B

应用程序主机 A 可以与正在运行的主机位于同一台机器上ssh

应用程序主机 B 可以与主机位于同一台机器上remoteIP

附录 0:请注意,此命令使端口 5901 看起来正在使用,但实际上隧道是两端端口 5901 的替代品。因此,您可以禁用端口 5901。事实上,如果不需要其他端口,您可以禁用除正在使用的端口(ssh按照惯例为 22)之外的所有端口。

ssh -L 5901:127.0.0.1:5901 user@remoteIP 附录 1:最近我注意到,当发出REMOTE HOST/etc/ssh/sshd_config没有值的命令时 GatewayPorts,LOCAL HOST 会报告以下错误:“bind:无法分配请求的地址”。即使生成了错误,隧道仍可工作。当GatewayPorts没有值时,它默认为no。似乎该值no更安全,所以我想保持这种状态。错误消息是我无法解释的。我现在发出以下命令,以避免生成错误消息。 ssh -L 127.0.0.1:5901:127.0.0.1:5901 user@remoteIP

答案4

由于在许多示例中使用了“localhost”,因此我发现这令人困惑。

本地端口:远程主机:远程端口用户@中间主机

LocalPort:这是 SSH 在运行 ssh 命令的机器上打开的本地端口。您通常会将客户端机器设置为连接到 localhost:5901 - 在客户端机器上。

RemoteHost:这是尝试连接的目标计算机 - 来自 IntermediateHost 计算机。即它与 RemoteHost 相关。当您在此处使用“localhost”时,它表示“IntermediateHost”。

RemotePort:这是目标机器上的目标端口

IntermediateHost:这是 ssh 命令连接的监听机器(默认情况下,在 SSH 端口 22 上)。该机器会尝试连接到 RemoteHost:RemoteHost。

在经常引用的安全 VNC / SSH 隧道示例中:

ssh -L 5901:localhost:5900 myuser@IntermediateHost

这里的“localhost”是相对于IntermediateHost来说的,也就是说,它就是IntermediateHost。

本地端口 5901 已打开,因此您可以配置本地 VNC 客户端以连接到本地计算机上的端口 5901。令人困惑的是,这被称为:“localhost:5901”。

在参数中,“localhost:5900”是IntermediateHost连接的目标:因此它连接到自身。

因此,在 IntermediateHost 上运行的 ssh 服务器被指示将所有流量发送到“localhost:5900” - 即发送到其自身。流量来自发送到本地客户端计算机上的端口 5901 的流量。

希望这可以帮助

相关内容