La computadora A (asumiendo que la ip es 44.44.44.44) puede ftp al host 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.
La computadora B (mi computadora local) no puede ftp al host 130.89.148.12. Construyamos un túnel ssh con el comando ssh de esta manera:
ssh -L -f -N localhost:2121:130.89.148.12:21 [email protected]
El túnel ssh entre mi PC local y la computadora A (44.44.44.44) se conectó después contraseña para iniciar sesión en 44.44.44.44.
Luego, para ingresar el comando en la consola de mi PC local:
ftp localhost:2121 ftp: localhost:2121: Name or service not known
¿Qué le pasa a mi túnel ssh?
Piense en chexum, el comando ftp correcto es ftp localhost 2121 Pero nuevo problema.
Comentarios
Respuesta
Su enfoque no tiene en cuenta que a diferencia de otros protocolos comunes, FTP usa tanto el puerto 20 como el puerto 21 sobre TCP por defecto .
El término pasivo se refiere a que el protocolo se comporta ligeramente mejor que las implementaciones iniciales.
Aquí hay un enlace:
http://www.slacksite.com/other/ftp.html
El puerto 20 / TCP se usa para datos y el puerto 21 / TCP para comandos .
En Unix, también los puertos privilegiados < 1024, solo pueden estar vinculados por root.
Entonces, o lo hace:
sudo ssh -f -N -L 20:130.89.148.12:20 -L 21:130.89.148.12:21 [email protected]
De esta manera no le da ningún puerto extra, y solo lo usa con
ftp -p localhost
o si no tiene root:
ssh -f -N -L 2120:130.89.148.12:20 -L 2121:130.89.148.12:21 [email protected]
y luego use:
ftp -p -P 2121 localhost
Desde man ftp http://linux.die.net/man/1/ftp
-p modo pasivo
-P puerto
o si tiene una versión de ftp
que no es compatible con -P
(Debian 9 / Ubuntu 16.04):
ftp -p localhost 2121
También dejaré un enlace a «Explicación del reenvío de puertos local y remoto de los túneles SSH»
Por último, recomendaría no utilizar root en el sistema remoto para conexiones ssh. root es una cuenta muy poderosa y solo debe reservarse para la administración del sistema.
Además, en muchos Linux modernos, el inicio de sesión remoto ssh como root viene deshabilitado por defecto.
Comentarios
- ¿Qué? La conexión de datos no usa el puerto 20; utiliza un puerto aleatorio > 1024. Además,
ftp
no parece tener una opción-P
, al menos no en Ubuntu 16.04. Por lo tanto, no puede reenviar ftp con ssh ya que ' no sabe qué puerto aleatorio se elegirá cuando se establezca la conexión de datos (y obtiene uno diferente para cada archivo transferido o cada vez quels
). - No, el servidor también escucha en un puerto efímero. Tiene que hacerlo, ya que puede servir a varios clientes y si usara el puerto 20 para cada uno de ellos, no tendría idea de cuál correspondía a qué sesión de control.
- Imprimí el RFC de FTP en mi punto impresora matricial y la estudié cuando tenía 16 años. Me di cuenta de que puede emitir un comando PASV a un servidor, luego un comando PORT al otro servidor con la dirección IP y el número de puerto de la respuesta PASV del otro servidor y obtenerlos para enviar el archivo directamente de un servidor a otro en lugar de tener que descargarlo y cargarlo yo mismo a través de mi módem de 28,8 kbps. Más tarde, apareció un programa llamado FXP que podía hacer eso, y también escribí mi propio software de servidor FTP para WinNT que hizo volar los pantalones de cualquier otra cosa. Vaya a ver una respuesta PASV usted mismo.
- Está confundido. Escucha en el puerto 21, no en el 20. Usted se conecta al servidor en el puerto 21, luego emite un comando PORT, indicándole al servidor a qué IP y número de puerto debe conectarse, o un comando PASV, en cuyo caso comienza a escuchar la conexión de datos en un puerto efímero y especifica qué puerto está en la respuesta. Desde un comando entre comillas pasv a ftp.gnu.org: " 227 Ingresando al modo pasivo (208,118,235,20,96,222) ". Tenga en cuenta que el servidor está escuchando en el puerto 96,222 o 24,798.
- ¿Por qué no editarlo para que sea correcto?
ftp(1)
página de manual sobre cómo especificar un puerto. Suele estar ' separados por un espacio (no dos puntos) o como una-p
opción. Usted ' También necesitaré asegurarse de usar ftp pasivo, así que primero consulte el manual.