How to enable autocompletion for remote paths when using scp?

Make sure that you've turned on the fancy autocompletion. On many distributions, this means your ~/.bashrc needs to contain . /etc/bash_completion.

You'll need to have passwordless authentication set up, i.e. with a key that's already loaded in ssh-agent.

Establishing an SSH connection is slow, so you can considerably speed up completions by establishing a connection once and for all and using that connection thereafter. The relatively complicated way to do that is to open a master SSH connection with ssh -N -M target-host after setting up master-slave connections in ~/.ssh/config; see Multiple ssh sessions in single command for instructions (you need the ControlMaster and ControlPath options).

The simple method is to mount the remote filesystem over SSHFS and use cp with normal shell completion.

mkdir ~/remote
sshfs [email protected]:/home/USER ~/remote
cp -p someFile ~/remote/put/it/some/where/oh/damn/you/here

All I needed to do was to add my public key to the remote machine:

cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys"

And now scp tab-completes.

Look here if you need to set up your keys first.


You could switch to lftp instead of using scp. It gives you a nice consistent interface for file transfer over ftp, sftp and ssh including the autocomplete you are looking for and more (i.e. wildcards).

lftp fish://user@machine

opens a connection over ssh like you do above with scp. Many machines support sftp:// too which is even nicer in my experience.