0

我了解到 TCP 需要两个端口才能工作:一个向服务器发送数据,一个从服务器接收数据。有没有办法指定——专门针对 ssh——这两个端口?我的印象是本地隧道方法是针对传出本地端口和传入服务器端口,而不是传入本地端口。

4

3 回答 3

1

你学到的并不完全正确。TCP 连接是在一对 IP/端口组合(客户端 IP/端口、服务器 IP/端口)之间,但每一端只使用一个端口。例如,连接可能在 1.2.3.4:65432 上的客户端和 5.6.7.8:22 上的服务器之间。

客户端端口对于大多数应用程序(包括 SSH)来说完全无关紧要。UsePrivilegedPort您可以使用该指令强制 SSH 使用“特权”(低于 1024)端口,但这仅对 root 可用。

于 2012-03-05T23:48:56.770 回答
0

使用 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。

于 2012-03-06T00:00:48.263 回答
0

我了解到 TCP 需要两个端口才能工作:一个向服务器发送数据,一个从服务器接收数据

不,它没有。它需要一个本地端口和一个远程端口。它是双向协议,也是全双工的。因此,您的问题不需要答案。

于 2012-03-06T00:46:18.913 回答