【发布时间】:2012-03-05 23:37:48
【问题描述】:
我了解到 TCP 需要两个端口才能工作:一个向服务器发送数据,一个从服务器接收数据。有没有办法指定——专门针对 ssh——这两个端口?我的印象是本地隧道方法是针对传出本地端口和传入服务器端口,而不是传入本地端口。
【问题讨论】:
我了解到 TCP 需要两个端口才能工作:一个向服务器发送数据,一个从服务器接收数据。有没有办法指定——专门针对 ssh——这两个端口?我的印象是本地隧道方法是针对传出本地端口和传入服务器端口,而不是传入本地端口。
【问题讨论】:
你学到的并不完全正确。 TCP 连接是在一对 IP/端口组合(客户端 IP/端口、服务器 IP/端口)之间,但每一端只使用一个端口。例如,连接可能在 1.2.3.4:65432 上的客户端和 5.6.7.8:22 上的服务器之间。
客户端端口对于大多数应用程序(包括 SSH)来说完全无关紧要。您可以使用 UsePrivilegedPort 指令强制 SSH 使用“特权”(低于 1024)端口,但这仅适用于 root。
【讨论】:
使用 openssh,您可以创建加密隧道,将流量从一个点引导到另一个点。 您可以使用 -L 和/或 -R 标志来完成这项工作。
Ex1:您可以在您的客户端 PC 上绑定一个本地端口,该端口将被转发到流经 SSH 服务器的另一台机器;
(ssh user@sshserver -L<local_port>:<remote_ip>:<remote_port>)
ssh user@192.168.1.1 -L8080:192.168.1.20:8090
Ex2:您可以绑定远程机器上的端口,该端口连接到流经 SSH 服务器的本地机器端口;
(ssh user@sshserver -R<local_port>:<remote_ip>:<remote_port>)
ssh user@192.168.1.1 -R8080:192.168.1.20:8080
Ex3:您可以在客户端 PC 上绑定一个本地端口,该端口将被转发到 SSH 服务器本身的远程端口;
(ssh user@sshserver -L<local_port>:<sshserver>:<remote_port>)
ssh user@192.168.1.1 -L8080:127.0.0.1:8090
在第一个例子中,执行:
telnet 127.0.0.1 8080
在客户端机器上会将您连接到端口 8090 上的 192.168.1.20(这是一个 SSH 服务器网络!)
在第二个示例中,端口 8080 将绑定(创建)在机器 192.168.1.20(它是一个 SSH 服务器网络!)上,并且它与 SSH 客户端的本地端口 8080 相关联。因此,在 192.168.1.20 上,您可以:
telnet 127.0.0.1 8080
您将被定向到 SSH 客户端计算机的 8080。
第三个例子和第一个例子一样,但是远程机器是SSH服务器本身,所以如果你:
telnet 127.0.0.1 8080
从您的客户端计算机,您将连接到 SSH 服务器的端口 8090。
【讨论】:
我了解到 TCP 需要两个端口才能工作:一个将数据发送到 服务器,一个从服务器接收数据
不,它没有。它需要一个本地端口和一个远程端口。它是双向协议,也是全双工的。因此,您的问题不需要答案。
【讨论】: