Comment activer l'auto-complétion pour les chemins distants lors de l'utilisation de scp?

37

J'ai copié à distance un fichier sur mon ordinateur portable en utilisant:

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

Je veux pouvoir compléter automatiquement le chemin distant en appuyant sur l'onglet.

k0pernikus
la source
1
C'est activé pour rsync, ce qui à mon avis est de loin supérieur àscp
Marco Ceppi
3
Il est activé par défaut dans zsh.
Stéphane Gimenez
3
Il est activé pour scpaussi, au moins ça marche ici. Vous avez besoin d'une clé ssh déjà ajoutée à un agent ssh.
enzotib

Réponses:

24

Assurez-vous que vous avez activé l'auto-complétion de fantaisie. Sur de nombreuses distributions, cela signifie que vos ~/.bashrcbesoins doivent être contenus . /etc/bash_completion.

Vous aurez besoin d'une authentification sans mot de passe, c'est-à-dire avec une clé déjà chargée ssh-agent.

Etablir une connexion SSH est lent, vous pouvez donc accélérer considérablement les complétions en établissant une connexion une fois pour toutes et en utilisant cette connexion par la suite. La façon relativement compliquée de le faire est d'ouvrir une connexion maître SSH ssh -N -M target-hostaprès avoir établi des connexions maître-esclave ~/.ssh/config; voir Plusieurs sessions SSH en une seule commande pour des instructions (vous avez besoin des options ControlMasteret ControlPath.).

La méthode simple consiste à monter le système de fichiers distant sur SSHFS et à l'utiliser cpavec un achèvement normal du shell.

mkdir ~/remote
sshfs USER@192.168.178.32:/home/USER ~/remote
cp -p someFile ~/remote/put/it/some/where/oh/damn/you/here
Gilles, arrête de faire le mal
la source
On dirait qu'il y a quelque chose dans la /etc/bash_completionsource ~/.bash_completion. Je veux être en mesure d'avoir cette fonction sur un serveur distant où je ne peux pas écrire /etc/et il n'y a pas /etc/bash_completion(bien qu'il y ait /etc/bash_completion.d/. Y at - il une version qui serait sûr de faire tourner de mon répertoire? Il y a au moins une référence à ~ / .bash_completion donc je crains qu'il ne me manque plus de choses et qu'il pourrait y avoir une boucle cyclique ou autre chose qui pourrait causer des erreurs.
redbmk
7

Tout ce que j'avais à faire était d'ajouter ma clé publique à la machine distante:

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

Et maintenant, l' scponglet est complet.

Regardez ici si vous devez d'abord configurer vos clés.

k0pernikus
la source
7
C’est ce à quoi il ssh-copy-idsert, en plus il gérera les autorisations de fichiers pour vous.
Glenn Jackman
2

Vous pouvez passer à lftp au lieu d’utiliser scp. Il vous offre une interface cohérente agréable pour le transfert de fichiers via ftp, sftp et ssh, y compris la saisie semi-automatique que vous recherchez et plus encore (par exemple, des caractères génériques).

lftp fish: // utilisateur @ machine

ouvre une connexion sur ssh comme vous le faites ci-dessus avec scp. De nombreuses machines supportent sftp: // aussi, ce qui est encore plus agréable selon mon expérience.

fschmitt
la source
0

Comme @Giles l'a dit , assurez-vous que la configuration est terminée automatiquement et que vous avez la clé ssh sur la machine.

L'ajout de cette configuration à ma ~/.ssh/configfait une énorme différence dans la vitesse.

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

Cela créera une connexion principale pour chaque hôte.

La persistance de 10 vous laisse un peu de temps pour voir le répertoire avant la fermeture automatique de la connexion.

Sans la persistance, vous devrez recréer une connexion et cela ralentira l'achèvement de votre onglet.

Exemple

~$ scp mymachine:~/pa LANGUETTE

path/ palace/ pandas/ porn/

~$ scp mymachine:~/path/to LANGUETTE

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

Harry
la source