it-swarm.com.de

scp zwischen zwei Remote-Hosts von meinem (dritten) PC

Ich habe zwei Remote-Hosts.
Host1-> 10.3.0.1
Host2-> 10.3.0.2
Beide betreiben einen SSH-Server.

Der SSH-Server überwacht Port 22 in Host1 und Port 6969 in Host2. Jetzt muss ich auf meinem lokalen Computer etwas von Host1 auf Host2 kopieren, ohne mich über ssh bei Host1 oder Host2 anzumelden. So etwas wie,

scp [email protected]:/path/to/file [email protected]/path/to/file

Wie kann ich das tun, beachten Sie bitte, dass die beiden Hosts unterschiedliche Ports für ssh verwenden.

124
uwais ibrahim

In der Vergangenheit war die Funktionsweise von scp beim Aufruf ( naiv ) zum Kopieren von Dateien zwischen fernen Systemen sehr unpraktisch: Wenn Sie beispielsweise geschrieben haben

    scp [email protected]:/home/user1/file1.txt [email protected]:/home/user2/file1.txt

scp würde zuerst eine ssh-Sitzung auf remote1 öffnen und dann scp von dort zu remote2 ausführen. Damit dies funktioniert, müssen Sie die Berechtigungsnachweise für remote2 auf remote1 einrichten.

Die moderne Art, dies zu tun ("modern", weil es erst vor ein paar Jahren implementiert wurde und vielleicht nicht jeder eine -3fähige scp hat), erfordert zwei Schritte. Der erste notwendige Schritt besteht darin, mit ~/.ssh/config alle Optionen für die Verbindung zu remote1 und remote2 wie folgt einzurichten:

    Host remote1.example.org
    Port 2222
    IdentityFile /path/to/Host1-id_rsa

    Host remote2.example.org
    Port 6969
    IdentityFile /path/to/Host2-id_rsa

Auf diese Weise wird es möglich, alle erforderlichen Optionen an den Befehl ohne Mehrdeutigkeiten zu übergeben: Wenn wir beispielsweise auf der CLI gesagt hätten Port 2222 verwenden ohne die obige Konfiguration, wäre unklar gewesen, ob wir haben uns auf remote1 oder auf remote2 bezogen, und ebenso auf die Datei mit den kryptografischen Schlüsseln. Auf diese Weise bleibt die CLI übersichtlich und einfach.

Verwenden Sie zweitens die Option -3 wie folgt:

    scp -3 [email protected]:/home/user1/file1.txt [email protected]:/home/user2/file1.txt

Die Option -3 weist scp an, den Datenverkehr über den PC zu leiten, auf dem der Befehl ausgegeben wird, auch wenn es sich um einen Dritten für die Übertragung handelt. Auf diese Weise müssen sich die Berechtigungsnachweise nur auf dem ausstellenden PC, dem Drittanbieter, befinden.

203
MariusMatutiae

Als ich das letzte Mal versuchte, war scp nicht in der Lage, das zu tun. Ihre Befehlszeile sieht in Ordnung aus. Diese Problemumgehung funktioniert:

ssh -p port_on_machine1 [email protected] "cat /path/to/file/one"|ssh -p port_on_machine2 [email protected] "cat >/path/to/file/two"
5
peterh

In meinem Fall habe ich eine Remote-zu-Remote-Kopie ohne das Argument -3 durchgeführt. Der mit dem Parameter '-P' angegebene Port funktioniert mit dem 1. Server, aber Port 22 wird mit dem 2. Server verwendet.

ssh -P 1234 [email protected] [email protected]

Die Lösung besteht darin, die /etc/ssh/ssh_config-Datei in server1 zu bearbeiten und diese Zeilen hinzuzufügen:

Host *.otherdomain.com
   Port  1234

Auf diese Weise wird der Port 1234 für beide verwendet. Es könnte auch anders sein.

Diese Lösung bietet einen besseren Durchsatz als frühere Lösungen, da die Kommunikation direkt erfolgt.

4
david.perez

Die Quelle und das Ziel können als URI in der Form scp: // [user @] Host [: port] [/ path] angegeben werden.

so kannst du laufen:

scp -3 scp://[email protected]0.3.0.1:22/path/to/file scp://[email protected]:6969/path/to/file
1
molabib