SSH – eine Möglichkeit, Dateien zu übertragen, ohne eine separate SFTP-Sitzung zu öffnen?

StackOverflow https://stackoverflow.com/questions/440524

Frage

Eigentlich keine Programmierfrage, aber für viele Programmierer relevant ...

Nehmen wir an, ich habe eine SSH-Sitzung mit einem anderen Computer geöffnet.

remote:html avalys$ ls
willkommen.msg index.html readme.txt
remote:html avalys$

Gibt es einen Befehl, den ich in meine Remote-Shell eingeben kann, der sofort eine der Dateien im aktuellen Verzeichnis überträgt (z. B.willkommen.msg) auf meinen lokalen Computer, d.h.

remote:html avalys$ stransfer willkommen.msg
Abrufen von /home/avalys/html/welcome.msg nach „welcome.msg“.
/home/avalys/html/welcome.msg 100 % 23 KB 23,3 KB/s 00:00
remote:html avalys$

Die einzige mir bekannte Möglichkeit besteht darin, eine parallele SFTP-Sitzung und eine CD in meinem aktuellen Verzeichnis in der SSH-Sitzung zu öffnen, was bei der Fernverwaltung eines Servers eine echte PITA darstellt.

BEARBEITEN:Ich bin mir der Möglichkeit bewusst, eine umgekehrte SFTP/SCP-Verbindung zu verwenden, aber das erfordert mehr Tipparbeit.Es wäre großartig, wenn ich nur den Namen eines Befehls eingeben könnte (z. B.„stransfer“) und die Datei(en), die ich übertragen möchte, und es funktioniert einfach.

War es hilfreich?

Lösung

Sie könnten so eine invertierte Übertragungsverbindung w / ssh -Rport:127.0.0.1:22 user@host for scp back.

Use scp user@host:port eingerichtet, um Zugang zu erhalten.

Andere Tipps

Bei der Erforschung dieses ich ein Programm gefunden, die als Drop-in-Ersatz für das OpenSSH-Client funktioniert, zssh.

sudo apt-get install zssh
zssh user@remote
sudo apt-get install zssh
sz file.name
<ctrl>+<space>
rz

Funktioniert wie ein Zauber.

Hier ist meine bevorzugte Lösung für dieses Problem [wie auf einem doppelte Frage gegeben Ich fragte]. Stellen Sie einen Reverse-SSH-Tunnel auf die Erstellung der SSH-Verbindung. Dies wird einfach durch zwei bash Funktion: grabfrom () muss auf dem lokalen Host definiert werden, während grab () soll auf dem Remote-Host definiert werden. Sie können alle anderen ssh Variablen hinzufügen, die Sie (z -X oder -Y) verwenden, wie Sie für richtig halten.

function grabfrom() { ssh -R 2202:127.0.0.1:22 ${@}; };
function grab() { scp -P 2202 $@ localuser@127.0.0.1:~; };

Verbrauch:

localhost% grabfrom remoteuser@remotehost
password: <remote password goes here>
remotehost% grab somefile1 somefile2 *.txt
password: <local password goes here>

Positiv:

  • Es funktioniert ohne spezielle Software auf jeder Host über OpenSSH
  • Es funktioniert, wenn lokale Host hinter einem NAT-Router
  • Es kann als ein Paar von zwei einzeiligen bash-Funktion implementiert wird

Negativ:

  • Es verwendet eine feste Portnummer so:
    • wird nicht mit mehreren Verbindungen zu Remote-Host arbeitet
    • könnte mit einem Prozess in Konflikt geraten, dass Port auf dem entfernten Rechner mit
  • Es erfordert localhost ssh-Verbindungen
  • akzeptieren
  • Es erfordert einen speziellen Befehl über die Einleitung der Sitzung
  • Es ist nicht implizit behandeln Authentifizierung an den localhost
  • Es erlaubt es nicht, das Zielverzeichnis auf localhost angeben
  • Wenn Sie von mehreren localhost auf die gleiche Remote-Host greifen, ssh nicht wie die Tasten zu ändern

Zukünftige Arbeiten: Dies ist immer noch ziemlich kludgy. Offensichtlich wäre es möglich, die Authentifizierungsproblem zu behandeln, indem SSH-Schlüssel entsprechend der Einrichtung und ist es noch einfacher, die Spezifikation eines Remote-Verzeichnis ermöglichen durch einen Parameter hinzufügen () zu greifen

Schwieriger ist die anderen Negativ Adressierung. Es wäre schön, einen dynamischen Port zu holen, aber soweit ich das sagen kann, gibt es keine elegante Art und Weise, dass Port an der Shell auf dem entfernten Rechner zu übergeben; Wie es am besten, wie ich sagen kann, ist OpenSSH nicht zulassen, dass Sie können beliebige Umgebungsvariablen auf dem Remote-Host und bash setzen nicht Umgebungsvariablen von einer Befehlszeile Argumente. Selbst wenn Sie einen dynamischen Port auswählen können, gibt es keine Möglichkeit, um sicherzustellen, nicht auf dem Remote-Host verwendet wird, zunächst ohne Verbindung.

Sie können eine SSH-Verbindung mit sshfs montieren. Auf diese Weise können Sie Dateien innerhalb derselben SSH-Verbindung übertragen, während der Verwendung, was SSH-Client Ihnen am besten gefällt. Sie können sogar einrichten mounten, wenn Sie möchten.

In der Schule, wenn ich eine Datei von einem Linux-System auf einen anderen zu übertragen, ich in der Regel Fern ssh und anschließend scp verwenden, um die Datei aus dem Remote-System zurück zu meinem Computer zu übertragen. Nicht sicher, ob das ist, was Sie suchen oder, wenn dies auch anwendbar in Ihrem Fall, aber das ist in der Regel meine Art der Fortbewegung ein weiteres Terminal-Fenster zu öffnen.

Nur um zu klären, ob IhrFormal nicht vertraut mit scp würden Sie immer noch die Lage, die angeben, müssen möchten Sie die Datei auf Ihrem Computer setzen, aber für mich sowieso dies ist in der Regel eine einfache Sache als der Speicherort der Datei zu erinnern auf dem Remote-Computer. Hier ist ein Link, die hilfreich sein können: http://www.computerhope.com/unix/scp HTM

https://superuser.com/questions/259481/reverse-scp-over-ssh -Anschluss

sftp server
get file.txt

Offenbar können Sie auch um n Sachen in der SFTP-Konsole navigieren und get nimmt einen vollständigen Dateipfad. Kopien in das Verzeichnis, aus dem Sie sftp lief.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top