Ich habe eine große Datei auf dem Server one
und ich möchte es Server kopieren two
verwenden scp
. Ich habe die Schlüssel richtig eingerichtet und kann von meinem Desktop aus ssh / scp auf beide Server übertragen.
Die zu kopierende Datei ist größer als der freie Speicherplatz auf der Festplatte meiner Workstation. Deshalb wollte ich Folgendes tun:
scp one:/opt/bigfile.tar.gz two:/opt/bigfile.tar.gz
aber ich habe:
ssh: Could not resolve hostname one: Name or service not known
Wir haben hier kein DNS (fragen Sie mich nicht warum), also habe ich dies in meiner ~ / .ssh / config:
Host one
Hostname <IP address of server one>
User jspurny
Host two
Hostname <IP address of server two>
User jspurny
Wenn ich es mit einer kleineren Datei versuche und sie von one
meiner Workstation auf die Workstation übertrage two
, funktioniert es einwandfrei:
scp one:/opt/smallerfile.tar.gz .
scp smallerfile.tar.gz two:/opt/
Bei der Verwendung von IP-Adressen direkt, wie im Kommentar vorgeschlagen, habe ich Folgendes erhalten:
$ scp jspurny@<one's IP>:bigfile.tar.gz jspurny@<two's ip>:bigfile.tar.gz
Host key verification failed.
lost connection
Kein Problem:
Die Größe ist hier kein Problem - es war nur ein "Auslöser" für dieses Problem, da es keine Möglichkeit gab, bigfile.tar.gz
auf meiner Workstation zu speichern . Das Problem tritt unabhängig von der Dateigröße auf.
Frage:
Warum macht der Befehl:
scp oneremote:file secondremote:file
wirft ein Fehler, egal ob mit .ssh/config
Aliasen oder direkt mit IP-Adressen?
Gelöst - irgendwie - immer noch auf der Suche nach Erklärungen - habe ich die große Datei in kleinere Dateien aufgeteilt und sie einzeln über meine Workstation übertragen. Ich frage mich immer noch, warum es nicht funktioniert hat. Deshalb würde ich mich immer noch über eine Erklärung freuen, was falsch war.
Fand einen Grund, warum es fehlschlägt: Es scheint, ich war dumm. Ich dachte, dass der Befehl
scp one:file two:file
stellte zwei Verbindungen zu jedem Server her und empfing dann Daten von einem und sendete sie sofort an zwei und wirkte so wie ein Relais.
Dies ist eindeutig nicht der Fall, da eine einfache -v
Option offenbarte, dass sie tatsächlich nur eine Verbindung zu einer herstellt und von einer versucht, eine Verbindung zu zwei herzustellen . Was natürlich nicht möglich ist, weil Server eins keine Verbindung zu zwei herstellen soll .
Antworten:
Einfaches Rohr
Versuche dies:
Der erste sollte den Dateiinhalt an Ihren Computer senden, während der zweite den Inhalt an den zweiten Computer senden sollte. Ich würde an beiden Enden nach der Übertragung eine Prüfsumme berechnen, um sicherzustellen, dass auf dem Weg nichts verloren ging oder verstümmelte.
Durchdachte Tunnel
Für komplexere Anwendungen können Sie SSH-Tunnel verwenden. Sie könnten beispielsweise Folgendes versuchen:
Dann können Sie eine Verbindung öffnen auf
one
zu Maschinelocalhost
Port5001
und es wird zweimal weitergeleitet und als Verbindung am Endetwo
zulocalhost
Port22
. Dies ist der ssh-Port, sodass Sie diesen für einen weiteren scp oder für rsync oder was auch immer verwenden können. Sie können auch einenrsync
Server auftwo
Port 873 anstelle von 22 starten und weiterleiten. Oder Sie könnennc
auf beiden Seiten Rohdaten über eine beliebige Portnummer übertragen.Der Hauptvorteil des obigen Ansatzes besteht darin, dass Sie eine bidirektionale TCP-Verbindung zwischen den beiden Maschinen haben, anstatt nur eine einseitige Pipe. Auf diese Weise können die beiden Parteien Informationen austauschen, was in diesem
rsync
Fall besonders wichtig ist.quelle
Der volle Kredit für diese Antwort geht an /superuser//a/602436/142948
Sie benötigen die
-3
Option für scp:http://www.openbsd.org/cgi-bin/man.cgi?query=scp&sektion=1
Andernfalls wird der 2. Alias "zwei" auf Host "eins" aufgelöst , der möglicherweise nicht vorhanden ist.
quelle
Da Sie den Benutzerzugriff auf dem Quellserver (eins) , warum nicht einloggen und führen Sie Ihre scp Befehl auf dem Server direkt haben ... Wenn Sie befürchten , dass es zu lange dauern wird, dann den Befehl starten innerhalb einer
screen
dann vom Bildschirm lösen mitCtrl+a d
und lass es laufenWenn Sie dies jedoch von Ihrer Workstation aus tun müssen und die SSH-Schlüssel vom Quell- zum Zielserver einwandfrei funktionieren, senden Sie den
scp
Befehl als Parameter einesssh
Befehls wie folgt:quelle
Nach der Fehlermeldung suchen: "Überprüfung des Hostschlüssels fehlgeschlagen." scheint das einfachste zu sein, was man hier machen kann. Ich fand diese Frage & Antwort auf askubuntu mit dem Titel: SSH-Verbindungsproblem mit dem Fehler "Host-Schlüsselüberprüfung fehlgeschlagen ..." .
Eine der Antworten auf diese Fragen und Antworten deutete darauf hin, dass das Problem mit einem widersprüchlichen Eintrag in Ihrer
~/.ssh/known_hosts
Datei zusammenhängt. Sie können die problematischen Einträge entweder mit einem beliebigen Texteditor aus dieser Datei löschen oder mit dem folgenden Befehl Einträge entfernen:Wo
hostname
ist entweder die IP-Adresse oder der Name des Servers, von dem aus Sie eine Verbindung herstellen möchten? Das alles wäre übrigens auf Host Two .quelle
one
undtwo
von meinem Arbeitsplatz ohne Probleme Server .. Das Problem beginnt , wenn ich laufescp one:file two:file
von der Workstation. Und es gibtknown_hosts
weder eine noch zwei Dateien . Ich habe gerade versucht, zwei Schlüssel auf meiner Workstation zu entfernen (sogar einen , um sicherzugehen), aber nichts hat sich geändert (außer, dass Sie sicher sind, dass Sie sich sicher sind).scp workstation:file one:file
undworkstation:file two:file
? Offensichtlich müssen Sie nicht "workstation: file" sagen. Ich sage es nur explizit, um die Konversation zu führen.workstation$ scp one:file file
undworkstation$ scp file two:file
. Wie auch immer, ich denke, ich habe es gelöst. Ich werde es als meine eigene Antwort hinzufügen.