Wenn ich über SSH bei einem System angemeldet bin, gibt es eine Möglichkeit, eine Datei zurück auf mein lokales System zu kopieren, ohne ein weiteres Terminal oder eine Bildschirmsitzung zu starten und scp oder ähnliches auszuführen, oder ohne SSH vom Remote-System zurück zum lokales System?
Akzeptierte Antwort:
Master-Verbindung
Am einfachsten ist es, wenn Sie im Voraus planen.
Öffnen Sie zum ersten Mal eine Master-Verbindung. Leiten Sie für nachfolgende Verbindungen Slave-Verbindungen durch die vorhandene Master-Verbindung. In Ihrem ~/.ssh/config
, Richten Sie die Verbindungsfreigabe so ein, dass sie automatisch erfolgt:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
Wenn Sie eine ssh-Sitzung mit demselben (Benutzer, Port, Maschine) wie eine bestehende Verbindung starten, wird die zweite Sitzung über die erste getunnelt. Der Aufbau der zweiten Verbindung erfordert keine erneute Authentifizierung und geht sehr schnell.
Während Sie also eine aktive Verbindung haben, können Sie schnell:
- Kopieren Sie eine Datei mit
scp
oderrsync
; - Mounten Sie ein entferntes Dateisystem mit sshfs.
Weiterleitung
Bei einer bestehenden Verbindung können Sie einen Reverse-SSH-Tunnel aufbauen. Erstellen Sie in der ssh-Befehlszeile eine Remote-Weiterleitung, indem Sie -R 22042:localhost:22
übergeben wobei 22042 eine zufällig gewählte Nummer ist, die sich von jeder anderen Portnummer auf dem Remote-Computer unterscheidet. Dann ssh -p 22042 localhost
auf dem Remote-Rechner verbindet Sie zurück mit dem Quell-Rechner; Sie können scp -P 22042 foo localhost:
verwenden um Dateien zu kopieren.
Sie können dies mit RemoteForward 22042 localhost:22
weiter automatisieren . Das Problem dabei ist, dass Sie die Weiterleitung nicht erhalten, wenn Sie sich mit mehreren Instanzen von ssh mit demselben Computer verbinden oder wenn jemand anderes den Port verwendet.
Wenn Sie die Remote-Weiterleitung nicht von Anfang an aktiviert haben, können Sie dies in einer bestehenden SSH-Sitzung tun. Geben Sie Enter ein ~C
Eingabe -R 22042:localhost:22
Eingabe .
Weitere Informationen finden Sie unter „Escape-Zeichen“ im Handbuch.
Es gibt auch einige interessante Informationen in diesem Server-Fault-Thread.
Kopieren und einfügen
Wenn die Datei klein ist, können Sie sie eingeben und aus der Terminalausgabe kopieren und einfügen. Wenn die Datei nicht druckbare Zeichen enthält, verwenden Sie eine Kodierung wie base64.
remote.example.net$ base64 <myfile (copy the output)
local.example.net$ base64 -d >myfile (paste the clipboard contents) Ctrl+D
Wenn Sie die X-Weiterleitung aktiviert haben, kopieren Sie die Datei bequemer auf den Remote-Computer und fügen Sie sie lokal ein. Sie können Daten in und aus xclip
leiten oder xsel
. Wenn Sie den Dateinamen und die Metadaten beibehalten möchten, kopieren Sie ein Archiv und fügen Sie es ein.
remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -