Wie kann ich eine Datei über einen Zwischenserver scannen?


15

Ich benutze Ccygwin unter WinXP (mit der Bash-Shell). Ich möchte eine Datei von meinem lokalen Rechner auf einen entfernten Rechner scannen - Host2. Allerdings kann ich nur zu einem Zwischenrechner SSH - host1 und dann von dort SSH zu host2. (Beachten Sie, dass ich von meinem lokalen Host aus nicht auf host2 zugreifen kann.)

Ich dachte, Tunnelbau wäre meine Antwort, aber wenn ich versuche, einen Tunnel zu errichten

ssh -L 9999:localhost:9998 dalvarado@host1 'ssh -L 9998:localhost:1234 -N dalvarado@host2'

Aber nachdem Sie diesen Befehl eingegeben und die Eingabetaste gedrückt haben, bleibt das System einfach hängen. Was ist der richtige Weg, um einen Tunnel einzurichten und anschließend eine Datei zu scannen?

Vielen Dank, -


2
Duplikat von superuser.com/questions/174160/… - siehe meine Antwort unten für eine Zusammenfassung.
jmetz


Antworten:


17

Dies wird bereits am besten beantwortet hier .

Zusammenfassend: Geben Sie Folgendes ein ~/.ssh/config

Host target.machine
User          targetuser
HostName      target.machine
ProxyCommand  ssh proxyuser@proxy.machine nc %h %p 2> /dev/null

und dann einfach scpzu target.machine, wann immer Sie über proxy.machine vertreten wollen!

Funktioniert auch für ssh, spart also auch Zeit beim Versenden auf den Zielcomputer.

Das Guthaben sollte an user24925 gehen, der dies im Jahr 2011 beantwortet hat.


13

Verwenden Sie das folgende Format, um einen SSH-Tunnel einzurichten:

ssh -L 9999:host2:22 user@host1

Dieser Befehl stellt eine Verbindung zu host1as her userund tunnelt Port 9999 auf dem Computer, der den Befehl an Port 22 ausgibt host2. -Nist optional, oder Sie können etwas wie topoder verwenden watch, um die Sitzung bei Bedarf am Leben zu halten.

Dann einfach scpzu host2 auf localhost: 9999.


1
Wenn ich diesen Befehl ausführe, soll ich mich dann bei host1 anmelden? Nachdem ich diesen Befehl ausgeführt hatte, öffnete ich eine weitere Bash-Shell und führte "scp hello.txt localhost: 9999" aus, bekam aber den Fehler "ssh: connect to host localhost port 22: Connection refused". Was mache ich hier falsch?
Dave

3
Wenn Sie diesen Befehl ausführen, werden Sie mit host1 verbunden, ja. Ihre scpBefehlssyntax ist jedoch falsch. Versuchen Sie dies, scp -P 9999 hello.txt user@localhost:/path/to/destination/filewo usersich der Benutzer befindet host2, unter dem Sie sich anmelden möchten.
Regen

1
@ Rain, du könntest dieses Beispiel in die Hauptantwort setzen;)
dmeu

5

Seit OpenSSH 7.3 können Sie mit -Joder -o ProxyJumpden Bastion / Jump-Host angeben. Daher zu SSH node2über node1:

ssh -J you@node1 you@node2

SCP hat das -JArgument nicht, aber es erlaubt es -o, also funktioniert das:

scp -o ProxyJump=you@node1 file.txt you@node2:~

3

Sie können die Datei zunächst wie folgt auf host1 scpen:

scp file dalvarado@host1:.

Dann mach das, um es zu host2 zu bringen:

ssh -t dalvarado@host1 'scp file dalvarado@host2:.'

Die -tOption, sshdie Zuweisung eines Pseudoterminals scpzu erzwingen , was es für Host1 möglicherweise einfacher macht, Sie zur Eingabe einer Passphrase / eines Passworts aufzufordern. Wenn der ssh-agent überall ausgeführt und konfiguriert wird, sollten Sie nicht zur Eingabe einer Passphrase / eines Passworts aufgefordert werden.

Ich biete diese Alternative an, da Sie bei Verwendung eines Tunnels immer noch zwei Befehle benötigen: einen zum Einrichten des Tunnels und einen zum Kopieren der Datei durch diesen. Das scheint einfacher zu sein.


Fantastische Lösung !!!
Riccardo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.