Ich möchte eine Datei von einer aktiven SSH-Sitzung herunterladen. In vielen Fällen wahrscheinlich ich könnte verwenden SFTP nur, scp
, rsync
et al , aber es gibt Zeiten , in denen ich Berechtigungen auf dem Remote - Server in einer Weise erhöht habe ich nicht diese Methoden verwenden können.
Wenn Sie Schwierigkeiten haben zu verstehen, was ich meine, stellen Sie sich vor, Sie wollten etwas von /root/
oder herunterladen /var/log/auth.log
. Root Login ist deaktiviert (da wir keine Idioten sind). Wie bekommen Sie diese Datei? Kopieren Sie es an einen weniger geschützten Ort und verschieben Sie es dann? Das ist klobig. Es gibt auch Szenarien, in denen der Remote-Pfad komplex oder temporär ist oder nicht einmal ein Pfad, weil die Ausgabe eines Remote-Befehls lokal gespeichert werden soll. Aus der Ferne speichern, dann kopieren? Clunk!
Es gibt mehrere umständliche Möglichkeiten, um Versionen davon zu erhalten, aber in einer idealen Welt hätte ich einen ähnlichen lokalen Schreibzugriff vom Remoteserver aus, wobei ich die vorhandene SSH-Sitzung als Conduit verwende. So etwas wie (das ist nur ein künstlerischer Eindruck):
$oli@remote: cp /root/cheesecake /local/
Und es erscheint nur in meinem lokalen cwd
. Und bidirektionaler Zugriff wäre keine schlechte Sache.
Es ist acht lange Jahre her, seit ich diese Frage gestellt habe und wir haben ein echtes Klirren gesehen, aber es bleibt ein Problem, mit dem ich gelegentlich immer noch zu kämpfen habe.
Ich habe die Frage in etwas viel Idealistischeres umgestaltet. Ich verstehe voll und ganz, dass es derzeit möglicherweise keine perfekte Antwort gibt. Alle bisherigen und zukünftigen Bemühungen um mein Ideal werden gewürdigt.
zssh
ist wahrscheinlich dem zmodemähnlichen Workflow am nächsten, an den Sie sich erinnern können.Antworten:
Möglicherweise möchten Sie zssh auschecken , das im Universum und daher mit verfügbar ist
sudo apt-get install zssh
Sie benötigen es auf Ihrem Ubuntu-Server und auf Ihrem Client. Wenn Sie jedoch mit zssh angemeldet sind, drücken Sie einfach "Strg- @" und es wird der "Dateiübertragungsmodus" aufgerufen, mit dem Sie Dateien wieder über die Pipe an Ihren Server senden können Client-Computer oder laden Sie sie vom Client auf den Server hoch.
Sie müssen jedoch nicht erneut authentifizieren oder ein neues Fenster öffnen, um scp zu starten.
Wenn Sie ssh-Schlüssel und einen ssh-Agenten verwenden, können Sie ganz einfach Folgendes tun:
Welches wird Hintergrund ssh, und dann einfach
scp $!:/whatever/whatever .'
Sobald die Datei übertragen wurde
fg
, erhalten Sie ssh zurück.Wenn Sie keine ssh-Schlüssel verwenden, können Sie immer noch die Optionen "ControlMaster" und "ControlPath" verwenden, die den aktuellen OpenSSh-Versionen hinzugefügt wurden. Dies ist jedoch schwierig. Überprüfen Sie man ssh_config
quelle
Angenommen, Sie betreiben einen SSH-Server auf Ihrem Desktop (es gibt Möglichkeiten, dies zu umgehen, aber ich denke, sie alle erhöhen die Komplexität und haben möglicherweise Sicherheitsprobleme), dann können Sie einen umgekehrten SSH-Tunnel einrichten. Siehe SSH einfach kopieren Sie die Datei auf das lokale System. bei unix.SE vorbei .
~C
Enter-R 22042:localhost:22
Entereine Reverse - Port - Weiterleitung von Ihrem Server auf Ihren Desktop erstellen (22042 kann eine beliebige Portnummer zwischen 1024 und 65534, die nicht in Gebrauch ist).scp -P 22042 foo localhost:
wird die Dateifoo
in Ihrem aktuellen Verzeichnis auf dem Server auf Ihren Desktop kopiert .~
Ctrl+ eingeben Zmv ~/foo .
Enterfg
Enter.SSH-Escape-Sequenzen beginnen mit
~
; Die Tilde wird erst nach einem Zeilenumbruch erkannt.~ Ctrl+Z
stellt ssh in den Hintergrund.~C
gibt eine Befehlszeile ein, in der Sie eine Weiterleitung erstellen oder entfernen können.quelle
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 zurückkopiert. Es benötigt 2 sehr kleine Skripte (1 remote, 1 local) und 2 Zeilen in Ihrer ssh-Konfiguration. Die Schritte sind wie folgt:
Fügen Sie diese 2 Zeilen zu Ihrem hinzu
~/.ssh/config
:Wenn Sie nun eine SSH-Verbindung zu machineX haben, brauchen Sie keine Passwörter, um eine andere zu öffnen.
Erstellen Sie ein einzeiliges Skript auf dem Remote-Computer mit dem Namen
~/.grabCat.sh
Erstellen Sie auf dem lokalen Computer ein Skript mit dem Namen ~ / .grab.sh
und mache einen Alias für grab.sh in (
~/.bashrc
oder wo auch immer):Das war's auch schon. Wenn Sie angemeldet sind, starten Sie
machineX:/some/directory
einfach ein neues Terminal und geben Sie Folgendes einDadurch wird die Datei in Ihrem aktuellen Arbeitsverzeichnis auf dem lokalen Computer gespeichert. Sie können einen anderen Speicherort als drittes Argument für "grab" angeben.
Hinweis: Natürlich müssen beide Skripte "ausführbar" sein, dh
chmod u+x filename
.quelle
Wenn Ihr Client-Computer (der Computer, auf dem Sie sitzen) als Computer A bezeichnet wird und der Computer, auf dem Sie sich gerade in SSH befinden, als Computer B bezeichnet wird, muss auf Ihrem lokalen Computer SSHD ausgeführt werden und Port 22 geöffnet sein. Dann:
Kopiert
myfile
auf ComputerB in mein ComputerA-Ausgangsverzeichnis auf ComputerA. Dies setzt voraus, dass Benutzer-ID / Kennwort identisch sind.Kopiert
myfile
eine/newdir/newname
MaschineB auf MaschineA. Dies setzt voraus, dass Benutzer-ID / Kennwort identisch sind.Ruft eine Kopie von
otherfile
aus meinem MachineA-Verzeichnis auf MachineA ab und legt sie in meinem aktuellen Arbeitsverzeichnis auf dem MachineB-Computer ab (standardmäßig unter UNIX durch das Zeichen "Punkt" (.) Gekennzeichnet). Dies setzt voraus, dass Benutzer-ID / Kennwort identisch sind.Wenn die Benutzer-ID / das Kennwort nicht identisch sind, verwenden Sie:
scp myfile user@MachineA:
Datei bekommen.scp user@MachineA:/path/to/my/otherfile .
Dateien ablegenANMERKUNGEN zu SCP:
Verfügt wie der
cp
Befehlscp
über die Option -p, um die Berechtigungseinstellungen der ursprünglichen Datei auf die Kopie zu übertragen (andernfalls wird die Kopie mit den normalen Einstellungen für neue Dateien erstellt), und über die Option -r, um einen gesamten Verzeichnisbaum mit einer zu kopieren Befehl.scp
Erstellt einen vollständig transparenten, verschlüsselten Datenkanal zwischen den beiden Computern, sodass Binärdaten (z. B. Bilder oder ausführbare Programme) korrekt beibehalten werden. Dies bedeutet auch, dassscp
die automatische Konvertierung der End-of-Line-Beendigung zwischen verschiedenen Betriebssystemtypen nicht möglich ist, wie dies mit ftp im "ASCII" -Modus möglich ist. Dies ist kein Problem beim Kopieren zwischen Unix-Systemen, die alle die gleiche End-of-Line-Konvention verwenden.quelle
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
quelle
Wenn Ihre Datei klein genug ist, können Sie sie mit base64 kodieren und dann lokal dekodieren:
Ursprüngliche Antwort, woher ich diese habe (und getestet): https://unix.stackexchange.com/a/2869/194134
quelle
Es ist nicht über die aktive SSH-Verbindung, aber scp kopiert Dateien mit den gleichen Mechanismen und Berechtigungen wie ssh.
quelle
get file
und auf meinem lokalen Computer auf magische Weise wiedergegeben wird. Wenn dies über einen Dienst erfolgen muss, der über SSH getunnelt ist, sollte es so sein. Aber es sollte sitzungsgebunden sein.sshd
ausgeführt, und daher sollten Sie inscp
der Befehlszeile des Servers Dateien zurück auf den Client werfen können. Es gibt nur so viel Magie, um herumzugehen; manchmal müssen wir noch die Knöpfe drücken. Die FileZilla-Lösung ist auch praktisch.Dies ist mit einer Standard-SSH-Sitzung nicht möglich, aber Sie können anstelle von SSH ein Skript verwenden, das so etwas wie einen einfachen FTP- oder RSH-Server auf Ihrem lokalen System startet und SSH mit den erforderlichen Optionen ausführt, um einen Tunnel zurück zu Ihrem Desktop einzurichten für die Verbindung zu diesem Server.
quelle
konsole
verfügt über diese Funktion über das Menü "Bearbeiten-> ZModem-Upload", während Sie sich in einer Remote-Sitzung befinden (oder Strg-Alt-U).Bitte beachten Sie: Paket
lrzsz
muss zuerst installiert werden. Für mich sieht es so aus, als würde nur das Hochladen von ASCII-Dateien funktionieren.quelle
Da Sie eine Verbindung von einem Desktop aus herstellen, können Sie vermutlich ein zweites Terminal öffnen.
So mache ich oft:
realpath myfile
oderreadlink -f myfile
(ältere Ubuntu-Versionen sind nicht vorinstalliertrealpath
), und kopiere sie.scp
odersftp
, um die Datei abzurufen, und füge den vollständigen Pfad ein, den ich zuvor hatte. Zum Beispiel:scp user@host:/etc/some/file ./
Es ist ziemlich einfach, aber es ist auch leicht zu merken und benötigt kein zusätzliches Paket, um zu funktionieren.
quelle
Überraschenderweise sehe ich hier keine Erwähnung des guten alten Midnight Commanders . Meiner Meinung nach ist es wahrscheinlich der universellste und nützlichste Dateimanager für Shell mit Power-Funktionen, eines der "Must-Have" -Tools für diesen Fall, mit dem Sie sich auch über SSH, FTP und SFTP verbinden können, während Sie aktiv sind Im zweiten Bereich können Sie jedes andere (lokale) Dateisystem öffnen und so frei mit Dateien arbeiten.
Alles was Sie brauchen ist: apt-get install mc (aus dem Universum)
Führen Sie danach mc aus, öffnen Sie das Menü für das linke oder rechte Bedienfeld, wählen Sie die Shell-Verbindung aus, geben Sie den Benutzernamen @ remote-ip und das Kennwort ein F5, bewegen Sie sich mit F6 usw. gemäß den unten stehenden Tasten. Für die alten MS-User: genau wie in NC für DOS
quelle
WEG, das zu überdenken, Leute. Ich suchte auch nach all den tiefen, dunklen und komplexen Antworten. Es stellt sich heraus, dass Sie dies direkt von Dolphin aus der Dose tun können. fish: // Benutzername @ Server: Port
quelle