Wichtiger Hinweis:Die Maschine, die Sie "lokale Maschine" nennen, ist völlig irrelevant. Die eigentliche Geschichte beginnt, wenn Sie bereits auf 100.100.100.1
sind . Im Kontext von scp
und im Kontext dieser Antwort ist "lokal" die Maschine, auf der scp
wird von Ihnen aufgerufen.
Warum schlägt der erste [Befehl] fehl?
Sie haben versucht, zwischen zwei (formal) entfernten Hosts zu kopieren. scp
erkennt [email protected]:/path/1/
als nicht-lokaler Pfad. Es spielt keine Rolle [email protected]
zeigt auf den lokalen Rechner. Das Tool überprüft (und sollte) nicht, ob eine Adresse, die entfernt aussieht, auf den lokalen Computer zeigt. Nur indem Sie sich auf die Quelle bezogen haben, als wäre sie entfernt, haben Sie scp
gemacht behandeln Sie es als entfernt. Auch das Ziel war entfernt.
Das Kopieren zwischen zwei entfernten Hosts kann mit oder ohne -3
erfolgen Möglichkeit:
-3
Kopien zwischen zwei entfernten Hosts werden über den lokalen Host übertragen. Ohne diese Option werden die Daten direkt zwischen den beiden Remote-Hosts kopiert. […]
Das fettgedruckte Fragment trifft auf Ihren Fall zu (auch wenn Ihr scp
unterstützt -3
nicht ).
Wenn Sie -v
verwenden mit Ihrem ersten Befehl
scp -v -i ~/keyfile -r [email protected]:/path/1/ [email protected]:/path/2/
Sie sehen scp
verbindet sich vom lokalen Host zum Quellhost (der übrigens derselbe Host ist) unter Verwendung des mit -i
angegebenen Schlüssels . (Anscheinend ist der Host so konfiguriert, dass er diesen Schlüssel akzeptiert, wahrscheinlich weil der andere Server einen identischen Schlüssel zum Verbinden verwendet.)
Dann sehen Sie ein weiteres scp
wird auf dem Quellhost aufgerufen. Der Befehl lautet:
scp -v -r /path/1/ [email protected]:/path/2/
-v
und -r
sind dort, weil sie in Ihrem örtlichen Kommando waren. Der Quellpfad wird in einen lokalen Pfad übersetzt; Das Ziel bleibt unverändert. Wenn dieser Befehl erfolgreich ausgeführt wird, werden die Daten "direkt zwischen den beiden Remote-Hosts kopiert".
Beachten Sie, dass es kein -i
gibt . Sollte -i ~/keyfile
sein da sein? Oder besser gesagt -i /home/cindy/keyfile
oder so? (weil der lokale scp
so etwas bekommen, nachdem die lokale Shell die Tilde erweitert hat).
Nein. Im Allgemeinen kann (und ist es normalerweise) ein Remote-Quellhost anders sein als der lokale Host. Ein Pfad, der für den lokalen Host gültig ist, kann auf alles oder nichts auf dem Remote-Host zeigen. Wenn scp
auf dem Quellhost wurde mit -i
aufgerufen , würde es mehr Probleme verursachen, als es lösen könnte. Es ist eine gute Sache -i
wird nicht an den auf dem Quellhost aufgerufenen Befehl weitergegeben. Aber dann verbindet sich der Host mit dem Ziel mit seinem Standardschlüssel oder was auch immer seine Konfiguration ihm vorschreibt.
In Ihrem Fall scheint man den lokalen ~/keyfile
zu benötigen um sich mit dem Zielhost zu verbinden. Der Quellhost enthält die richtige Datei (weil in diesem speziellen Fall der lokale und der Quellhost dieselbe Maschine sind), aber der scp
Befehl, der tatsächlich eine Verbindung zum Ziel herstellt, fehlt -i
(wie es im Allgemeinen sein sollte) und daher wird der Schlüssel nicht verwendet.
Ihr zweiter Befehl verwendete einen lokalen Pfad als Quelle, nur das Ziel war entfernt. In diesem Fall der mit -i
angegebene Schlüssel wurde verwendet, um eine Verbindung vom lokalen Host zum Zielhost herzustellen, genau wie Sie es geplant haben. Daher hat es funktioniert.
Beachten Sie, ob Sie den lokalen Computer so konfiguriert haben, dass er automatisch ~/keyfile
verwendet um sich mit dem anderen Server zu verbinden (IdentityFile
in ~/.ssh/config
), dann würde der erste Befehl funktionieren. Der lokale Host würde sich unnötigerweise mit sich selbst verbinden, nur um sich selbst zu sagen, dass er sich mit dem Ziel verbinden soll, aber es würde trotzdem funktionieren. Die erste Verbindung würde ~/keyfile
verwenden wegen -i
, würde die zweite Verbindung ~/keyfile
verwenden wegen der Konfiguration.
Aus dem scp-Handbuch, Beschreibung der Option -3:Kopien zwischen zwei entfernten Hosts werden über den lokalen Host übertragen. Ohne diese Option werden die Daten direkt zwischen den beiden Remote-Hosts kopiert. Beachten Sie, dass diese Option die Fortschrittsanzeige deaktiviert und den Stapelmodus für den zweiten Host auswählt, da scp nicht nach Passwörtern oder Passphrasen für beide Hosts fragen kann.
Laut Beschreibung schlägt das zuerst fehl, weil 2 Remote-Server direkt kommunizieren (in Wirklichkeit kommuniziert der 100.100.100.1-Server mit dem 100.100.100.2-Server über ssh), daher haben Sie zwei Optionen:
- Verwenden Sie die Option -3.
- Konfigurieren Sie 2 Remote-Server, um sich mit dem SSH-Schlüssel der Schlüsseldatei authentifizieren zu können. Wenn Sie sich von 100.100.100.1 bis 100.100.100.2 Server mit ssh-Schlüssel anmelden können, wird Ihr ursprünglicher Befehl funktionieren.