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.
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 -3
fä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.
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"
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.
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