Wie aktiviere ich die automatische Vervollständigung für Remote-Pfade, wenn ich scp verwende?

37

Ich habe eine Datei per Fernzugriff auf meinen Laptop kopiert:

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

Ich möchte den Remote-Pfad automatisch vervollständigen können, indem ich die Tabulatortaste drücke.

k0pernikus
quelle
1
Es ist aktiviert für rsync, was meiner Meinung nach weit überlegen istscp
Marco Ceppi
3
Es ist standardmäßig in aktiviert zsh.
Stéphane Gimenez
3
Es ist auch aktiviert scp, zumindest funktioniert es hier. Sie benötigen einen SSH-Schlüssel, der bereits zu einem SSH-Agenten hinzugefügt wurde.
Enzotib

Antworten:

24

Stellen Sie sicher, dass Sie die ausgefallene Autovervollständigung aktiviert haben. Bei vielen Distributionen bedeutet dies, dass Sie Ihre ~/.bashrcAnforderungen enthalten müssen . /etc/bash_completion.

Sie müssen die kennwortlose Authentifizierung eingerichtet haben, dh mit einem Schlüssel, der bereits geladen ist ssh-agent.

Das Herstellen einer SSH-Verbindung ist langsam, sodass Sie die Fertigstellung erheblich beschleunigen können, indem Sie ein für alle Mal eine Verbindung herstellen und diese Verbindung anschließend verwenden. Der relativ komplizierte Weg, dies zu tun, besteht darin, eine Master-SSH-Verbindung zu öffnen, ssh -N -M target-hostnachdem Master-Slave-Verbindungen in eingerichtet wurden ~/.ssh/config. Anweisungen finden Sie unter Mehrere ssh-Sitzungen in einem Befehl (Sie benötigen die Optionen ControlMasterund ControlPath).

Die einfache Methode besteht darin, das entfernte Dateisystem über SSHFS bereitzustellen und cpmit normaler Shell-Vervollständigung zu verwenden.

mkdir ~/remote
sshfs USER@192.168.178.32:/home/USER ~/remote
cp -p someFile ~/remote/put/it/some/where/oh/damn/you/here
Gilles 'SO - hör auf böse zu sein'
quelle
Es sieht so aus, als ob sich etwas in /etc/bash_completionder Quelle befindet ~/.bash_completion. Ich möchte diese Funktion auf einem Remote-Server haben, auf den ich nicht schreiben kann /etc/und auf dem es keine gibt /etc/bash_completion(obwohl es eine gibt) /etc/bash_completion.d/. Gibt es eine Version, die sicher von meinem Home-Verzeichnis aus ausgeführt werden kann? Es gibt mindestens einen Verweis auf ~ / .bash_completion also ich fürchte, es fehlt mehr und es könnte eine zyklische Schleife oder etwas anderes geben, das Fehler verursachen könnte.
Redbmk
2

Sie könnten zu lftp wechseln, anstatt scp zu verwenden. Es bietet Ihnen eine schöne konsistente Schnittstelle für die Dateiübertragung über FTP, SFTP und SSH, einschließlich der von Ihnen gesuchten automatischen Vervollständigung und mehr (dh Platzhalter).

lftp fish: // user @ machine

öffnet eine Verbindung über ssh wie oben mit scp. Viele Maschinen unterstützen auch sftp: //, was meiner Erfahrung nach sogar noch schöner ist.

fschmitt
quelle
0

Wie @Giles gesagt hat , stellen Sie sicher, dass Sie die automatische Vervollständigung richtig eingerichtet haben und Ihren SSH- Schlüssel auf dem Computer haben.

Das Hinzufügen dieser Konfiguration zu meiner ~/.ssh/configmachte einen großen Unterschied in der Geschwindigkeit.

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

Dadurch wird für jeden Host eine Master-Verbindung erstellt.

Wenn die 10s bestehen bleiben, haben Sie etwas Zeit, um das Verzeichnis zu sehen, bevor die Verbindung automatisch geschlossen wird.

Ohne das Bestehenbleiben müssen Sie eine Verbindung neu erstellen, und die Fertigstellung der Registerkarte wird verlangsamt.

Beispiel

~$ scp mymachine:~/pa TAB

path/ palace/ pandas/ porn/

~$ scp mymachine:~/path/to TAB

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

Harry
quelle