Laden Sie eine Datei über eine aktive SSH-Sitzung herunter

83

Also habe ich meinen Ubuntu-Server von meinem Ubuntu-Desktop aus gestartet. Ich bin auf einem bestimmten Pfad und möchte eine Datei in mein lokales Dateisystem herunterladen (vorzugsweise den Pfad, den ich vor der SSH-Sitzung hatte).

Ich könnte SSH mounten und die Datei mit der Maus ziehen, aber was ist, wenn ich versuche, eine Root-Datei zu bekommen und mich direkt von root anzumelden? Selbst wenn das nicht der Fall war (es ist nicht jetzt), sicherlich muss es eine einfache Möglichkeit geben, eine Datei über eine aktive SSH-Verbindung zurückzuziehen.

Sicher!

    
Oli 15.11.2010, 15:59
quelle

11 Antworten

32

Sie können zssh ausprobieren, das im Universum verfügbar ist und daher mit

verfügbar ist

sudo apt-get install zssh

Sie benötigen es auf Ihrem Ubuntu-Server und auf Ihrem Client, aber wenn Sie mit zssh angemeldet sind, drücken Sie einfach 'ctrl- @' und es öffnet sich der "File transfer mode", mit dem Sie Dateien zurücksenden können pipe zu Ihrem Client-Rechner, oder laden Sie sie von Client zu Server.

Sie müssen sich jedoch nicht erneut authentifizieren oder ein neues Fenster für scp öffnen.

Wenn Sie SSH-Schlüssel und einen SSH-Agenten verwenden, können Sie ganz einfach Folgendes tun:

[enter]~[ctrl]-Z

Was wird Hintergrund ssh, und dann nur scp $!:/whatever/whatever .'

Sobald die Datei übertragen wurde, fg , um ssh zurück zu bekommen.

Wenn Sie keine ssh-Schlüssel verwenden, können Sie immer noch die Optionen "ControlMaster" und "ControlPath" verwenden, die zu den letzten OpenSSh-Versionen hinzugefügt wurden, aber das wird schwierig, check man ssh_config

    
SpamapS 17.11.2010, 01:46
quelle
24

Angenommen, Sie führen einen SSH-Server auf Ihrem Desktop aus (es gibt verschiedene Möglichkeiten, aber ich denke, sie fügen Komplexität hinzu und haben möglicherweise Sicherheitsprobleme), können Sie einen umgekehrten SSH-Tunnel einrichten. Siehe SSH, kopieren Sie die Datei einfach auf das lokale System. über unix.SE .

  • Geben Sie ein ~C Geben Sie -R 22042:localhost:22 Geben Sie ein, um eine umgekehrte Portweiterleitung von Ihrem Server auf Ihren Desktop zu erstellen (22042 kann sein jede Portnummer zwischen 1024 und 65534, die nicht verwendet wird.)
  • Dann kopiert scp -P 22042 foo localhost: die Datei foo in Ihr aktuelles Verzeichnis auf dem Server zu Ihrem Home auf dem Desktop.
  • Verschieben Sie nun die Datei in Ihr aktuelles Verzeichnis auf dem Desktop, indem Sie Enter ~ Strg + Z mv ~/foo . eingeben Geben Sie fg Geben Sie .
  • ein

Ssh-Escape-Sequenzen beginnen mit ~ ; Die Tilde wird erst nach einem Zeilenumbruch erkannt. ~ Ctrl+Z setzt ssh in den Hintergrund. ~C gibt eine Befehlszeile ein, in der Sie eine Weiterleitung erstellen oder entfernen können.

    
Gilles 15.11.2010 23:37
quelle
10

Ich habe einen Weg gefunden, dies mit Standard-SSH zu tun. Es ist ein Skript, das die aktuelle ssh-Verbindung dupliziert, Ihr Arbeitsverzeichnis auf dem Remote-Computer findet und die angegebene Datei auf den lokalen Computer kopiert. Es benötigt 2 sehr kleine Skripte (1 remote, 1 local) und 2 Zeilen in deiner ssh config. Die Schritte sind wie folgt:

  1. Fügen Sie diese 2 Zeilen zu Ihrem ~/.ssh/config :

    hinzu
    ControlMaster auto
    ControlPath ~/.ssh/socket-%r@%h:%p
    

    Wenn Sie jetzt eine ssh-Verbindung zu machineX open haben, brauchen Sie nicht Passwörter, um ein anderes zu öffnen.

  2. Erstellen Sie ein 1-zeiliges Skript auf dem Remote-Rechner namens ~/.grabCat.sh

    \#!/bin/bash<br>
    cat "$(pwdx $(pgrep -u $(whoami) bash) | grep -o '/.*' | tail -n 1)"/
    
  3. Erstellen Sie ein Skript auf dem lokalen Computer mit dem Namen ~ / .grab.sh

    \#!/bin/bash
    [ -n "" ] && dir="" || dir="."
    ssh "" ".grabCat.sh " > "$dir/"
    
  4. und erstellen Sie einen Alias ​​für grab.sh in ( ~/.bashrc oder wo auch immer):

    alias grab=~/.grab.sh
    

Das ist alles fertig. Wenn Sie jetzt bei machineX:/some/directory angemeldet sind, starten Sie einfach ein neues Terminal und tippen Sie

grab machineX filename

Dadurch wird die Datei in Ihrem aktuellen Arbeitsverzeichnis auf dem lokalen Computer gespeichert. Sie können einen anderen Ort als drittes Argument zum "Greifen" angeben.

Hinweis: Offensichtlich müssen beide Skripte "ausführbar" sein, dh chmod u+x filename .

    
user6702 30.11.2010 11:29
quelle
5

Wenn Ihr Client-Rechner (der Rechner, an dem Sie sitzen) RechnerA heißt und der Rechner, an dem Sie gerade angemeldet sind, Rechner B heißt, muss auf Ihrem lokalen Rechner SSHD laufen und Port 22 geöffnet sein. Dann:

scp myfile machineA:

Kopiert myfile auf MachineB in mein MachineA-Home-Verzeichnis auf machineA. Dies setzt voraus, dass Benutzer-ID / Passwort identisch sind.

scp myfile machineA:/newdir/newname

Kopiert myfile 1 MachineB in /newdir/newname auf MaschineA. Dies setzt voraus, dass Benutzer-ID / Passwort identisch sind.

scp MachineA:/path/to/my/otherfile . 

Ruft eine Kopie von otherfile aus meinem MachineA-Verzeichnis auf MachineA ab und speichert sie in meinem aktuellen Arbeitsverzeichnis auf dem MachineB-Rechner (im Standard-UNIX-Modus mit dem Punkt (.) gekennzeichnet). Dies setzt voraus, dass Benutzer-ID / Passwort identisch sind.

Wenn die Benutzer-ID / das Passwort nicht identisch sind, verwenden Sie:

scp myfile user@MachineA: , um die Datei zu erhalten.

scp user@MachineA:/path/to/my/otherfile . um Dateien zu speichern

HINWEISE zu SCP:

Genau wie der Befehl cp verfügt scp über eine Option -p, um die Berechtigungseinstellungen der Originaldatei auf die Kopie zu übertragen (andernfalls wird die Kopie mit den normalen Einstellungen für neue Dateien erstellt) und a -r Möglichkeit, einen gesamten Verzeichnisbaum mit einem Befehl zu kopieren.

scp erstellt einen vollständig transparenten verschlüsselten Datenkanal zwischen den beiden Maschinen, so dass Binärdaten (wie Bilder oder ausführbare Programme) korrekt erhalten bleiben. Dies bedeutet auch, dass scp keine automatische End-of-Line-Abschlusskonvertierung zwischen verschiedenen Betriebssystemtypen durchführen kann, wie dies mit ftp im "ascii" -Modus der Fall ist. Das ist kein Problem beim Kopieren zwischen Unix-Systemen, die alle die gleiche Endkonvention verwenden.

    
LukeInDC 07.12.2012 20:39
quelle
2

Wenn Sie über ssh auf den Server zugreifen, können Sie auch über sftp eine Verbindung herstellen. Halten Sie den filezilla client (GUI) griffbereit und fügen Sie den Pfad ein, auf dem Sie sich gerade befinden

    
jet 16.11.2010 02:12
quelle
1

Es ist nicht über die aktive SSH-Verbindung, sondern scp kopiert Dateien mit denselben Mechanismen und Berechtigungen wie ssh.

    
msw 15.11.2010 17:11
quelle
1

Dies ist mit einer Standard-SSH-Sitzung nicht möglich, aber Sie könnten ein Skript anstelle von SSH verwenden, das so etwas wie einen einfachen ftp- oder rsh-Server auf Ihrem lokalen System startet und ssh mit den notwendigen Optionen zum Einrichten eines Tunnels ausführt auf Ihrem Desktop für die Verbindung mit diesem Server.

    
JanC 15.11.2010 18:45
quelle
1

konsole verfügt über diese Fähigkeit über das Menü "Bearbeiten- & gt; ZModem-Upload", während Sie sich in einer Remote-Sitzung befinden (oder Strg-Alt-U).

Bitte beachten Sie: Das Paket lrzsz muss zuerst installiert werden. Für mich sieht das aus wie funktioniert nur zum Hochladen von ASCII-Dateien.

    
jet 13.09.2015 22:58
quelle
1

Wenn Ihre Datei klein genug ist, können Sie sie mit base64 kodieren und dann lokal dekodieren:

remote.example.net$ base64 <myfile
(copy the output)
local.example.net$ base64 -d >myfile
(copy the output)
Ctrl+D

Ursprüngliche Antwort, wo ich das (und getestet) von Pfandrecht

habe     
wesalius 20.01.2017 20:17
quelle
0

Da Sie von einem Desktop aus eine Verbindung herstellen, können Sie ein zweites Terminal öffnen.

So mache ich es oft:

  • Vom ersten Terminal aus, auf dem die ssh-Sitzung läuft, erhalte ich den vollständigen Pfad der Datei, die ich abrufen muss, entweder realpath myfile oder readlink -f myfile (ältere Ubuntu-Versionen installieren nicht vor realpath ) und kopiere es.
  • Vom zweiten Terminal aus benutze ich scp oder sftp , um die Datei zu erhalten, indem ich den vollständigen Pfad einfüge, den ich vorher hatte. Zum Beispiel: scp user@host:/etc/some/file ./

Es ist ziemlich einfach, aber es ist auch leicht zu merken und benötigt kein extra Paket um zu funktionieren.

    
gerlos 20.01.2018 10:59
quelle
0

Überraschenderweise sehe ich hier keinen guten alten Midnight Commander . Meiner Meinung nach ist es wahrscheinlich das universellste & amp; nützlicher Dateimanager für die Shell mit Power-Fähigkeiten, eines der "Must-Haves" -Tools für den Fall, mit dem Sie auch über SSH, FTP, SFTP verbinden können, während auf dem zweiten Panel können Sie andere öffnen (Ihre lokalen) Dateisystem und so mit Dateien frei arbeiten.

Alles, was Sie brauchen, ist: apt-get install mc (aus dem Universum)

Danach mc, öffnen Sie das Menü für den linken oder rechten Bereich, wählen Sie Shell-Verbindung, geben Sie Benutzername @ remote-ip, das Passwort - eigentlich, das ist es .. kopieren (hier: Download) Dateien / Ordner von einem Rechner zu einem anderen mit F5, bewege dich mit F6, und so weiter entsprechend den Tasten unten. Für die alten MS-Benutzer: genau wie in NC für DOS

    
Nex0 04.07.2018 15:10
quelle

Tags und Links