Your approach is not taking in account that contrary to other common protocols, FTP uses both port 20 and port 21 over TCP by default.
The term passive refers that the protocol is slightly better behaved than the initial implementations.
Here is a link:
http://www.slacksite.com/other/ftp.html
Port 20/TCP is used for data, and port 21/TCP for commands.
In Unix, also privileged ports < 1024, only can be bound by root.
So either you do:
sudo ssh -f -N -L 20:130.89.148.12:20 -L 21:130.89.148.12:21 [email protected]
This way you do not give any extra port, and only use it with
ftp -p localhost
or if you do not have root:
ssh -f -N -L 2120:130.89.148.12:20 -L 2121:130.89.148.12:21 [email protected]
and then use:
ftp -p -P 2121 localhost
From man ftp http://linux.die.net/man/1/ftp
-p passive mode
-P port
or if with a version of ftp that does not support -P (Debian 9/Ubuntu 16.04):
ftp -p localhost 2121
I will also leave a link to "SSH tunnels local and remote port forwarding explained"
Lastly, I would advise on not using root in the remote system for ssh connections. root is a very powerful account, and should only be reserved for system administration.
Furthermore, in many modern Linuxes ssh remote login as root comes disabled by default.
Why is root login via SSH so bad that everyone advises to disable it?