it-swarm.com.de

Wie kann ich eine Datei von einem Host herunterladen, auf den ich nur über einen anderen Host SSH kann?

Ich möchte Dateien von meinem Bürocomputer auf meinen Laptop herunterladen.

Ich kann meinen Bürocomputer über SSH mit dem Organisationsserver und dann über den SSH vom Server mit meinem Bürocomputer verbinden.

Die einzigen Befehle, die der Organisationsserver akzeptiert, sind ssh, ssh1 und ssh2.

Wie kann ich eine Datei von meinem Bürocomputer (Remote) über den Server auf meinen Laptop (lokal) herunterladen?

31
Yohai Magan

In den vorherigen Antworten wird erwähnt, wie die ProxyJump-Direktive (in OpenSSH 7.3 hinzugefügt) verwendet wird, um eine Verbindung über einen Zwischenserver herzustellen (normalerweise als Bastion-Host bezeichnet), aber nur als Befehlszeilenargument.

Wenn es sich nicht um eine Maschine handelt, die Sie in Zukunft nicht mehr verbinden werden, konfigurieren Sie sie am besten unter ~/.ssh/config.

Ich würde eine Datei wie folgt einfügen:

Host office-machine
Hostname yochay-machine.internal.company.local
ProxyJump bastion-machine

Host bastion-machine
Hostname organization-server.company.com
...

Wenn Sie eine frühere Version von OpenSSH verwenden, die ProxyJump nicht unterstützt, ersetzen Sie diese durch die entsprechende Version:

ProxyCommand ssh -W %h:%p bastion-machine

und wenn Ihre lokale SSH-Version eine wirklich alte war, die -W nicht unterstützte:

ssh bastion-machine nc %h %p

obwohl letzteres erfordert, dass auf der Bastionsmaschine nc installiert ist.

Das Schöne an ssh ist, dass Sie jedes Ziel in der Datei konfigurieren können und es sehr gut stapeln kann. So arbeiten Sie am Ende mit office-machine Als Hostname für alle Tools (ssh, scp, sftp ...), da es sich um direkte Verbindungen handelt, und sie werden anhand der ssh_config herausfinden, wie eine Verbindung hergestellt werden kann. Sie können auch Platzhalter wie Host *.internal.company.local Haben, damit alle Hosts, die so enden, eine bestimmte Bastion durchlaufen, und dies gilt für alle. Nach der korrekten Konfiguration besteht der einzige Unterschied zwischen One-Hop-Verbindungen oder zwanzig Verbindungen in den langsameren Verbindungszeiten.

37
Ángel

Wenn Sie ein aktuelles OpenSSH (8.0) haben, können Sie das -J (Sprung-) Schalter :

scp -J [email protected] [email protected]:/path

Bei älteren Versionen (aber mindestens 7.3) können Sie die Direktive ProxyJump entweder über die Befehlszeile verwenden:

scp -o [email protected] [email protected]:/path

oder in ssh_config Datei, wie die Antwort von @ Ángel zeigt.


Es gibt andere Optionen wie ProxyCommand oder Portweiterleitung, die Sie auch für ältere Versionen von OpenSSH verwenden können. Diese werden in nterstützt OpenSSH die Multihop-Anmeldung? behandelt

37
Martin Prikryl

Manchmal können wir einfach die Pipeline benutzen. Diese Zeit ist heute.

ssh -A [email protected] ssh [email protected] cat filename > filename

Sie können auch hochladen

ssh -A [email protected] ssh [email protected] cat \\\> filename < filename

Ja, es gibt andere Lösungen, die Proxy usw. beinhalten, aber zu wissen, wie das geht, ist nützlich.

10
Joshua

Verwenden Sie die Konfiguration ProxyJump:

ProxyJump
Gibt einen oder mehrere Sprungproxys als [user @] Host [: port] oder als ssh-URI an. Mehrere Proxys können durch Komma getrennt sein und werden nacheinander besucht. Wenn Sie diese Option festlegen, stellt ssh (1) eine Verbindung zum Zielhost her, indem Sie zuerst eine ssh (1) -Verbindung zum angegebenen ProxyJump-Host herstellen und dann eine TCP-Weiterleitung an das endgültige Ziel von dort aus herstellen) .

scp -o [email protected] [email protected]:/path
7
RalfFriedl

Es gibt ein altes Protokoll namens ZMODEM : Nur wenige Programme unterstützen es heutzutage, aber wenn es funktioniert, kann es ziemlich praktisch sein.

Überprüfen Sie zunächst, ob das Terminalprogramm Ihres Laptops ZMODEM unterstützt. (Sie können beispielsweise iTerm2 (auf einem Mac) so konfigurieren, dass es ZMODEM unterstützt. Ein Beispielskript ist verfügbar hier .)

Führen Sie auf Ihrem Büromaschinen Folgendes aus: Sudo apt install lrzsz

Jetzt müssen Sie nur noch ssh auf Ihrem Büromaschinen ausführen und sz (filename) ausführen. Die Datei wird über Ihr Terminal heruntergeladen.

2
jick

Konfiguration unter ssh des Benutzers: ~/.ssh/config

Host *
    UserKnownHostsFile=/dev/null
    StrictHostKeyChecking=no
    ServerAliveInterval 300
    ServerAliveCountMax 2
    ForwardAgent yes


Host jump server
    HostName server.company.org
    User root

Host jump1 server1
    HostName server1.dmz.company.org
    User root
    ProxyJump jump

Host jump2 server2
    HostName server.dmz2.company.org
    User root
    ProxyJump jump1

Host *.intranet.company.org
    User user
    ProxyJump jump2

Sie können jetzt vom Intranetserver direkt über Jump-Server kopieren.

scp [email protected]:/home/user/ ./*

Ich bevorzuge dies, weil ich keine Sprung-Server mehr mit scp angeben muss

1
Lukáš Viktora

Über SCP -3:

scp -3 [email protected]:/root/file1.txt [email protected]:/root/file1.txt
0
wuseman