为什么 FTP 无法通过我的 ssh 隧道工作?

为什么 FTP 无法通过我的 ssh 隧道工作?

计算机A(假设ip为44.44.44.44)可以ftp主机130.89.148.12。

ftp 130.89.148.12
Connected to 130.89.148.12.
220 ftp.debian.org FTP server
Name (130.89.148.12:debian8): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

电脑B(我的本地电脑)无法ftp主机130.89.148.12。让我们用 ssh 命令构建一个 ssh 隧道:

ssh -L -f -N localhost:2121:130.89.148.12:21   [email protected]

我的本地电脑和计算机 A(44.44.44.44)之间的 ssh 隧道在密码登录到 44.44.44.44 后已连接。
然后在我的本地电脑控制台输入命令:

ftp  localhost:2121
ftp: localhost:2121: Name or service not known

我的 ssh 隧道出了什么问题?

想想 chexum,正确的 ftp 命令是 ftp localhost 2121 但新问题。 在此输入图像描述

答案1

您的方法没有考虑到与其他常见协议相反,FTP 使用两个都TCP 上的端口 20 和端口 21默认情况下

术语“被动”是指该协议是轻微地比最初的实现表现得更好。

这是一个链接:

http://www.slacksite.com/other/ftp.html

端口 20/TCP 用于数据,端口 21/TCP 用于命令。

在Unix中,特权端口<1024也只能由root绑定。

所以你要么这样做:

sudo ssh -f -N -L 20:130.89.148.12:20 -L 21:130.89.148.12:21 [email protected]

这样您就不会提供任何额外的端口,并且仅将其与

ftp -p localhost

或者如果您没有 root:

ssh -f -N -L 2120:130.89.148.12:20 -L 2121:130.89.148.12:21 [email protected]

然后使用:

ftp -p -P 2121 localhost 

来自 ftp 人http://linux.die.net/man/1/ftp

-p 被动模式
-P 端口

或者如果版本ftp不支持-P(Debian 9/Ubuntu 16.04):

ftp -p localhost 2121

我还将留下“SSH 隧道本地和远程端口转发解释”的链接

http://blog.trackets.com/2014/05/17/ssh-tunnel-local-and-remote-port-forwarding-explained-with-examples.html

最后,我建议不要在远程系统中使用 root 进行 ssh 连接。 root 是一个非常强大的帐户,只应保留用于系统管理。

此外,在许多现代 Linux 中,默认情况下禁用 root 身份的 ssh 远程登录。

为什么通过 SSH 进行 root 登录如此糟糕以至于每个人都建议禁用它?

相关内容