GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum gibt das Hinzufügen einer lokalen IP und eines Benutzernamens in scp einen Public-Key-Fehler zurück?

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:

  1. Verwenden Sie die Option -3.
  2. 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.

Linux
  1. Warum sich meine öffentliche Bibliothek für Linux und Open Source entscheidet

  2. Der Abruf öffentlicher Schlüssel ist nicht zulässig – WSO2-MySQL-Fehler

  3. Was bedeutet Env X=() { :;}; Command’ Bash Do und warum ist es unsicher?

  4. Benutzer- und Hostnamen im öffentlichen Schlüssel auf Ssh-copy-id?

  5. So beheben Sie den Fehler „Verifizierung des Hostschlüssels fehlgeschlagen“

So richten Sie den öffentlichen und privaten SSH-Schlüssel unter Linux ein

Linux – Warum wird „drm:vmw_host_log [vmwgfx]] *error* Host Log Message konnte nicht gesendet werden“ angezeigt und was kann ich tun, um das Problem zu beheben?

So fügen Sie dem VS-Code einen SSH-Schlüssel hinzu und stellen eine Verbindung zu einem Host her

Führen Sie SSH und SCP ohne Passworteingabe auf openSSH aus

Warum verwenden Debian und Ubuntu standardmäßig Runlevel 2?

Was macht 'set -e' und warum könnte es als gefährlich angesehen werden?