Ich frage mich, ob es für mich eine Möglichkeit gibt, die Datei vom Remote2-Host direkt von meinem lokalen Computer aus über einen Remote1-Host zu scannen.
Die Netzwerke erlauben nur Verbindungen zum Remote2-Host vom Remote1-Host. Außerdem können weder Remote1-Host noch Remote2-Host auf meinen lokalen Computer übertragen.
Gibt es so etwas wie:
scp user1@remote1:user2@remote2:file .
Erstes Fenster: ssh remote1
dann scp remot2:file .
.
Zweite Schale: scp remote1:file .
Erstes Fenster: rm file; logout
Ich könnte ein Skript schreiben, um all diese Schritte auszuführen, aber wenn es einen direkten Weg gibt, würde ich es lieber verwenden.
Vielen Dank.
EDIT: Ich denke so etwas wie das Öffnen von SSH-Tunneln, aber ich bin verwirrt darüber, welchen Wert ich wo setzen soll.
Im Moment habe remote1
ich für den Zugriff Folgendes $HOME/.ssh/config
auf meinem lokalen Computer.
Host remote1
User user1
Hostname localhost
Port 45678
Einmal aktiviert remote1
, um darauf zuzugreifen remote2
, ist es das lokale Standard-DNS und der Standard-Port 22. Was soll ich aktivieren remote1
und / oder ändern localhost
?
-p 45678
,-p 22
da mein remote1 SSH Port 22-p 22
anstelle von verwenden-p 45678
. Funktioniert auchscp -P 1234 ...
nicht bei mir. Ich bekommessh: connect to host localhost port 1234: Connection refused
. Wenn ich es versuchtscp -P 22 ...
habe, funktioniert es, aber es kopiert die Datei inremote 1
und nicht auf meinem lokalen Computer (remote2
).Doppelt
ssh
Selbst in Ihrem komplexen Fall können Sie die Dateiübertragung über eine einzige Befehlszeile einfach mit
ssh
;-) abwickeln. Dies ist nützlich, wenn
remote1
keine Verbindung hergestellt werden kann mitlocalhost
:tar
Sie verlieren jedoch Dateieigenschaften (Besitz, Berechtigungen ...).
Ist
tar
Ihr Freund jedoch, diese Dateieigenschaften beizubehalten:Sie können auch komprimieren, um die Netzwerkbandbreite zu reduzieren:
Und
tar
können Sie auch eine rekursive Verzeichnis durch grundlegende Übertragungssh
:ionice
Wenn die Datei sehr groß ist und Sie andere wichtige Netzwerkanwendungen nicht stören möchten, verpassen Sie möglicherweise die von und Tools bereitgestellte Einschränkung des Netzwerkdurchsatzes (z. B. verwendet nicht mehr als 1 Mbit / s).
scp
rsync
scp -l 1024 user@remote:file
Eine Problemumgehung verwendet jedoch
ionice
, um eine einzelne Befehlszeile beizubehalten:Hinweis: Bei
ionice
alten Distributionen möglicherweise nicht verfügbar.quelle
Dies wird den Trick machen:
Um die Datei
remote2
direkt vom Host aus zu scannen , fügen Sie die beiden Optionen (Host
undProxyCommand
) zu Ihrer ~ / .ssh / config-Datei hinzu (siehe auch diese Antwort im Superuser). Dann können Sie ausführen:von Ihrem lokalen Computer, ohne darüber nachdenken zu müssen
remote1
.quelle
-o 'Host remote2'
es nicht wirklich erforderlich zu sein scheint, wenn man von der Kommandozeile aus startet (dh einmal kopiert, ohne ~ / .ssh / config zu berühren)-o 'Host remote2'
. Vielen Dank.Mit openssh Version 7.3 und höher ist es einfach. Verwenden Sie die Option ProxyJump in der Konfigurationsdatei.
Befehle zum Anmelden oder Kopieren
Natürlich können Sie den Bastion Jump Host mit der Option "-J" für den Befehl ssh angeben, wenn er nicht in der Konfigurationsdatei konfiguriert ist.
Hinweis scp ist nicht scheint „-J“ Flagge ab jetzt zu unterstützen. (Ich konnte nicht in Manpages finden. Allerdings funktioniert oben scp mit der Einstellung der Konfigurationsdatei)
quelle
Diese Konfiguration funktioniert gut für mich:
Dann der Befehl
Kopiert myfile auf die Produktionsmaschine .
quelle
Es gibt eine neue Option
scp
, die kürzlich für genau denselben Job hinzugefügt wurde, der sehr praktisch ist-3
.TL; DR Führen Sie für den aktuellen Host, für den die Authentifizierung bereits in ssh-Konfigurationsdateien eingerichtet ist, einfach Folgendes aus:
Sie
scp
müssen aus neueren Versionen stammen.Bei allen anderen genannten Techniken müssen Sie die Authentifizierung von remote1 nach remote2 oder umgekehrt einrichten, was nicht immer eine gute Idee ist.
Argument
-3
bedeutet, dass Sie Dateien von zwei Remote-Hosts verschieben möchten, indem Sie den aktuellen Host als Vermittler verwenden. Dieser Host führt die Authentifizierung tatsächlich für beide Remote-Hosts durch, sodass diese keinen Zugriff aufeinander haben müssen.Sie müssen nur die Authentifizierung in ssh-Konfigurationsdateien einrichten, was ziemlich einfach und gut dokumentiert ist, und dann einfach den Befehl in TL; DR ausführen
Die Quelle für diese Antwort ist https://superuser.com/a/686527/713762
quelle
Kleine Ergänzung zu Olibres Lösung hier, mit der ich unter Verwendung dieser Quelle gearbeitet habe.
So wie Sie die drei Möglichkeiten zum
tar
Kopieren vom Remote-Host zum lokalen Host haben, funktioniert das Folgende für das Kopieren des lokalen Hosts zum Remote-Host in doppelten SSH-Situationen: (Führen Sie sie in dem Verzeichnis aus, aus dem die Dateien kopiert werden müssen, andernfalls verwenden Sie den vollständigen Pfad /Dateiname)Einzelne Datei ohne Komprimierung übertragen:
Einzelne Datei mit Komprimierung übertragen:
Rekursive Verzeichnisübertragung:
Das && hier verhindert, dass der Befehl ausgeführt wird, wenn die erste Hälfte des Befehls nicht funktioniert - beispielsweise wenn das Verzeichnis fehlt oder wenn ein Fehler in den Quell- / Zielpfadnamen vorliegt.
quelle