43

I remote copied a file to my laptop using:

scp someFile USER@192.168.178.32:/home/USER/put/it/some/where/oh/damn/you/here

I want to be able to autocomplete the remote path by hitting tab.

Jonas Stein
  • 4,078
  • 4
  • 36
  • 55
k0pernikus
  • 15,463

4 Answers4

34

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 USER@192.168.178.32:/home/USER ~/remote
cp -p someFile ~/remote/put/it/some/where/oh/damn/you/here
  • It looks like there is something in /etc/bash_completion to source ~/.bash_completion. I want to be able to have this feature on a remote server where I can't write to /etc/ and there is no /etc/bash_completion (though there is /etc/bash_completion.d/. Is there a version that would be safe to run from my home directory? There's at least one reference to ~/.bash_completion so I'm afraid there is more I'm missing and there could be a cyclical loop or something else that might cause errors. – redbmk Nov 13 '12 at 23:28
10

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

cat ~/.ssh/id_rsa.pub | ssh USER@192.168.178.32 "cat - >> ~/.ssh/authorized_keys"

And now scp tab-completes.

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

k0pernikus
  • 15,463
3

Like @Giles has said, make sure you have setup auto complete properly have have you ssh key on the machine.

Adding this configuration to my ~/.ssh/config made a huge difference in the speed.

Host *
 ControlMaster auto
 ControlPath ~/.ssh/master-socket/%r@%h:%p
 ControlPersist 10s

This will create a master connection for each host.

The 10s persist will gives you some time to see the directory before the connection is automatically closed.

Without the persist you will have to recreate a connection and it will slow your tab completion down.

Example

~$ scp mymachine:~/pa TAB

path/ palace/ pandas/ porn/

~$ scp mymachine:~/path/to TAB

~$ scp mymachine:~/path/to/file TAB

Harry
  • 131
2

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.

fschmitt
  • 8,790