Come abilitare il completamento automatico per i percorsi remoti quando si utilizza scp?


37

Ho copiato in remoto un file sul mio laptop usando:

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

Voglio essere in grado di completare automaticamente il percorso remoto premendo tab.


1
È abilitato per rsync, che secondo me è di gran lunga superiore ascp
Marco Ceppi

3
È abilitato per impostazione predefinita in zsh.
Stéphane Gimenez,

3
È abilitato scpanche per , almeno funziona qui. È necessario un tasto ssh già aggiunto a un agente ssh.
enzotib,

Risposte:


24

Assicurati di aver attivato il completamento automatico di fantasia. In molte distribuzioni, ciò significa che è ~/.bashrcnecessario contenere . /etc/bash_completion.

Avrai bisogno di impostare l'autenticazione senza password, ad esempio con una chiave che è già caricata ssh-agent.

Stabilire una connessione SSH è lento, quindi è possibile velocizzare notevolmente i completamenti stabilendo una connessione una volta per tutte e successivamente utilizzando quella connessione. Il modo relativamente complicato per farlo è aprire una connessione SSH master ssh -N -M target-hostdopo aver impostato le connessioni master-slave ~/.ssh/config; vedere Più sessioni ssh in un singolo comando per istruzioni (sono necessarie le opzioni ControlMastere ControlPath).

Il metodo semplice è montare il filesystem remoto su SSHFS e usarlo cpcon il normale completamento della shell.

mkdir ~/remote
sshfs USER@192.168.178.32:/home/USER ~/remote
cp -p someFile ~/remote/put/it/some/where/oh/damn/you/here

Sembra che ci sia qualcosa nella /etc/bash_completionfonte ~/.bash_completion. Voglio essere in grado di avere questa funzione su un server remoto in cui non riesco a scrivere /etc/e non c'è /etc/bash_completion(anche se c'è /etc/bash_completion.d/. Esiste una versione che sarebbe sicura eseguire dalla mia home directory? C'è almeno un riferimento a ~ / .bash_completion, quindi temo che manchi di più e potrebbe esserci un ciclo ciclico o qualcos'altro che potrebbe causare errori.
redbmk


2

Puoi passare a lftp invece di usare scp. Ti dà una bella interfaccia coerente per il trasferimento di file su ftp, sftp e ssh incluso il completamento automatico che stai cercando e altro (ad esempio caratteri jolly).

lftp fish: // user @ machine

apre una connessione su ssh come fai sopra con scp. Molte macchine supportano anche sftp: // che è ancora più bello nella mia esperienza.


0

Come ha detto @Giles , assicurati di aver completato l'installazione automatica correttamente se hai la chiave ssh sulla macchina.

L'aggiunta di questa configurazione al mio ha ~/.ssh/configfatto un'enorme differenza nella velocità.

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

Ciò creerà una connessione principale per ciascun host.

Il 10s persist ti darà un po 'di tempo per vedere la directory prima che la connessione venga chiusa automaticamente.

Senza il persistere dovrai ricreare una connessione e rallenterà il completamento della scheda.

Esempio

~$ scp mymachine:~/pa TAB

path/ palace/ pandas/ porn/

~$ scp mymachine:~/path/to TAB

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.