2015-03-03 4 views
13

Ich versuche, eine Datei von einem remote Server zu einen anderen remote Server von meinem lokalen Maschine zu kopieren. Hier ist, was ich versucheWie übertrage ich eine Datei zwischen zwei Remote-Servern mit scp von einer dritten, lokalen Maschine?

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

Das Problem zu tun, ist, dass ich beide zwei Passwörter weitergeben für userB und BenutzerC auf den Remote-Rechnern.

Nach Garron sollte das obige funktionieren, aber ich habe die Erlaubnis verweigert.

Permission denied (gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive). 
lost connection 

Irgendwelche Vorschläge?

Antwort

21

Diese Frage ist bereits auf Superuser:

https://superuser.com/questions/686394/scp-between-two-remote-hosts-from-my-third-pc

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

Wie dort beschrieben -3 Option weist scp Route Datenverkehr über den PC, auf dem der Befehl ausgegeben wird.

Das oben genannte ist wahr, wenn sich remote1 und remote2 im selben Netzwerk befinden.

Falls nicht: - Sie haben Port verwenden Spedition

+0

Das Hinzufügen von -3, um den Datenverkehr durch den lokalen Host zu leiten, verlangsamt die Sache wirklich, wenn der Localhost eine langsame Verbindung hat? – wcochran

+0

@wcochran Ja, tut es. Aber es ist einfach, es in allen Fällen funktionieren zu lassen. Ich frage mich, ob es eine verallgemeinerbare Möglichkeit gibt, eine direkte SSH-Verbindung zwischen zwei Remote-Hosts auf eine Weise einzurichten, die keine Geheimnisse für beide offen legt. – sudo

1

Sie benötigen nur Kennwörter, wenn Sie keine Einträge in der Datei authorized_keys haben. Sobald Sie sich bei den 2 Servern angemeldet haben (localA -> remoteB & remoteB -> remoteC) und die sichere Verbindung hergestellt haben, sollte Ihr ursprünglicher Befehl funktionieren.

+0

Hallo, ich kann es immer noch nicht tun aufgrund der Tatsache, dass ich Clearcase benutze, glaube ich. Aber dein Tipp ist großartig. autorized_keys kombiniert mit ~/.ssh/config und und Aliase sind viel schneller. Danke – Alan

3

Dies ist möglich, die folgende Befehlszeile in Linux-Terminal:

scp -3 user1 @ ip: Pfad/von/directory/user2 @ ip: path/to/directory

eine Aufforderung Es erscheint für Passwörter wie folgt fragen:

user1 Passwort des @ ip: user2 Kennwort des @ ip:

Wenn Sie beide Passwörter, um von pre geben Wenn Sie nach dem ersten Passwort eingeben, sollte es akzeptieren, aber es wird nicht. Auch wenn Sie beide Passwörter in der Reihenfolge erneut eingeben, aber nicht nach dem ersten Passwort Enter drücken, wird das Passwort nicht erneut akzeptiert.

Sie müssen Benutzer2 zuerst eingeben, dann die Eingabetaste drücken und dann das Passwort von user1 eingeben und die Eingabetaste drücken. Das wird funktionieren.

Ich weiß, es klingt nicht richtig, aber nur das wird funktionieren. Dies ist ein Bug in scp.

+0

ist es möglich, ein Shell-Skript mit Passwort auch im Inneren gespeichert zu erstellen? – sjd

+0

hängt davon ab! Was ist dein Ziel? Du willst scp oder ssh machen? –

21

Wenn Sie auf beiden Remote-Servern von Ihrem lokalen SSH (local -> remote1 & local -> remote2), dann könnten Sie versuchen:

ssh -A -t [email protected] scp srcpath [email protected]:destpath 

Dies wird übertragen direkt von remote1-remote2 Verwenden Sie Ihre lokalen Anmeldeinformationen den ganzen Weg.

Wenn Sie nicht nach Passwörtern gefragt werden möchten, sollten Sie die Datei authorized_keys auf den Fernbedienungen einrichten.

+0

Dank Ruben, die Verwendung von Schlüsseln ist die sicherste Option von ihnen beiden, nach der Mehrheit der meisten erfahrenen SSH-Benutzer, die ich bisher gesehen habe. – Alan

+0

Ein Hinweis darauf ist, dass, da dies wird * direkt * von remote1 zu remote2 verbinden, dann ist es nicht genug, so ssh zu remote2 von Ihrem lokalen, müssen Sie überprüfen, dass Sie ssh von remote1 zu remote2 (z. B. die Namen und Konfiguration in Ihrer ~/.ssh/config auf remote1) – Peteris

+1

Die beste Lösung, die ich bisher gesehen habe. Sie müssen die Server nicht autorisieren, sich gegenseitig zu "ssh" zu schicken, alles was Sie brauchen, ist der Zugriff auf beide mit Ihrem Schlüssel. Und im Gegensatz zu "scp -3" werden Daten direkt zwischen Servern kopiert, möglicherweise über ein sehr schnelles lokales Netzwerk. –

1

ich -o "ForwardAgent yes” finden funktioniert der Trick:

localA $ scp -o "ForwardAgent yes” [email protected]:/path/to/file [email protected]:/path 

Ich mag das besser als die -3 da will ich nicht eine mittlere Maschine Verlangsamung Dinge runter. Ich mag @RubenCaro auch antworten, aber das scheint direkter.

+0

Es funktioniert nicht für mich.Fehler: 'Berechtigung verweigert (publickey, gssapi-keyex, gssapi-with-mic, Passwort). Verbindung verloren. Irgendeine Ahnung? Vielen Dank! – Tung

+0

Funktioniert für mich (mit einem privaten Schlüssel): scp -o "ForwardAgent ja" -i localkey.pem userB @ remoteB:/Pfad/zu/Datei userC @ remoteC:/Pfad. – brunesto