scp between two remote hosts from my local
In the past, the way in which scp
worked, when called (naively) to copy files between remote systems, was very inconvenient: if you wrote for instance
scp user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt
scp
would first open an ssh
session on remote1, and then it wouldrun scp
from there to remote2. For this to work, you would have to set up the autohorization credentials for remote2 on remote1.
The modern
way to do it, instead, (modern because it has been implemented only a few years ago, and perhaps not everybody has a -3
-capable scp) requires two steps. First the use of the -3
option, as follows:
scp -3 user1@remote1:/home/user1/file1.txt user2@remote:/home/user2/file1.txt
The -3
option instructs scp
to route traffic through the pc on which the command is issued, even though it is a 3rd party to the transfer. This way, authorization credentials must reside only on the issuing pc, the third party.
The second necessary step is to use ~/.ssh/config
to set up all options for the connection to both remote1 and remote2, as follows:
Host remote1.example.org Port 2222 IdentityFile /path/to/host1-id_rsa Host remote2.example.org Port 6969 IdentityFile /path/to/host2-id_rsa
This way it becomes possible to pass all necessary options to the command, without worrying about the format on the CLI, which remains instead tidy and simple.