SCP with two different ports

How can I use scp command to copy files between two remote servers from my local PC ?

remote server 1 : IP=67.12.21.133 & port=6774

remote server 2 : IP=67.129.242.40 & port=6774

scp -rp -P 6774 [email protected]:/home/denny/testapp1.txt [email protected]:

It gives an error after giving password of 67.12.21.133 ,

ssh: connect to host 67.129.242.40 port 22: Connection refused

lost connection


You can use ~/.ssh/config to specify the ports to use for the hosts (and for setting many other nice things; check the man page man ssh_config):

# ~/.ssh/config

Host 67.12.21.133
  Port 6774

Host 67.129.242.40
  Port 6774

When doing this, you have to use the option -3 to scp, which copies the files through your local machine. Otherwise, scp issues the scp command via ssh on the first host, so it actually runs

 ssh -p 6774 [email protected] scp -rp /home/denny/testapp1.txt [email protected]:

and then the ~/.ssh/config of the first remote host (67.12.21.133) is used instead of your local one.

When you have setup your ~/.ssh/config correctly, this should work:

scp -rp3 [email protected]:/home/denny/testapp1.txt [email protected]:

Of course, you can also copy the contents of the ~/.ssh/config file onto your first remote host, and then you can use scp without the -3 option, which will probably speeden up the transfer.

Or you can use the trick that scp uses and use such a command line:

ssh -p 6774 [email protected] scp -rp -P 6774 /home/denny/testapp1.txt [email protected]:

(Note the different case of the port parameter for ssh and scp: ssh -p 6774 vs. scp -P 6774)

PS: I got this information from the OpenSSH bugzilla where I entered this as a bug: https://bugzilla.mindrot.org/show_bug.cgi?id=2020


I found no easy solution but you could try to use sshfs the following way:

mkdir /tmp/h1
mkdir /tmp/h2

sshfs -p 6774 user1@host1:/public /tmp/h1
sshfs -p 2211 user2@host2:/data/src /tmp/h2

cp /tmp/h1/files.* /tmp/h2

fusermount -u /tmp/h1
fusermount -u /tmp/h2

Another way could be to use ssh (actually not successfull tested):

ssh user1@host1 "cat /public/file.bin" | ssh user2@host2 "cat >/data/file.bin"

Currently I don't found the right way to enter the two passwords. It asks some times for the two passwords but doesn't accept anyone. Maybe if you exchange the ssh keys between the hosts it works. Because you than don't need the passwords.

I hope this helps? Thomas


According to this page on the Linux Academy blog, you simply need to use the -P 6774 option right before the second remote path as well:

scp -rp -P 6774 [email protected]:/home/denny/testapp1.txt -P 6774 [email protected]:

Each use of the -P flag applies only to the next location on the command line, not the entire command. Any location that doesn't have a -P between it and the previous path (or the command name [scp]) defaults to the standard port (22).


A method working with the current version of OpenSSH is specifying the ports in the source and target URLs:

scp -3 scp://host1:port1//path/to/file  scp://host2:port2//path/to/file