Ich möchte eine Datei von meinem Computer A auf Server C kopieren, habe aber nur Zugriff auf Server C über Server B.
Anstatt zuerst auf Server B zu übertragen, melden Sie sich an und übertragen Sie dann auf Server C. Ist es möglich, die Datei direkt mit SCP oder ähnlichen Programmen zu übertragen?
(Emacs Tramp-Modus verfügt über diese Funktion zum Bearbeiten von Dateien aus der Ferne).
Nehmen Sie an, dass OpenSSH zu Ihrer SSH-Konfiguration in .ssh / config hinzugefügt wird
Dies bewirkt, dass SSH "direkt" eine Verbindung zu dem als entfernt bezeichneten Computer herstellen kann, indem Proxys über den als nahe bezeichneten Computer ausgeführt werden. Es kann dann Anwendungen wie scp und sftp für die entfernte Maschine verwenden.
Damit dies funktioniert, muss 'nc' aka netcat auf dem Computer mit dem Namen near installiert sein. Aber viele moderne Systeme werden es bereits haben.
Die tar-Lösung von towo ist effektiver bei One-Shot-Problemen, vorausgesetzt, Sie haben die Syntax und die Betriebsregeln von tar auswendig gelernt.
quelle
near
von dem Benutzernamen unterscheidet, wird der Benutzer indistant
der NäheProxyCommand ssh nearuser@near...
und der entfernte Benutzer in eine separateUser distantuser
Zeile eingegeben.Mit neueren Versionen von ssh auf dem Server in der Nähe von (B) funktionieren die folgenden ohne Netcat:
Es wird jedoch vorausgesetzt, dass AllowTcpForwarding auf dem Near-Rechner (B) yes ist (Standardeinstellung)
edit: benötigt OpenSSH 5.4+ auf B
quelle
Sie können mit etwas wie ssh zu Server B
Dann können Sie mit ssh zu Server C gehen
Ähnlich würde scp mit arbeiten
Denken Sie daran, für scp und ssh den korrekten Fall von p zu verwenden
quelle
Dies ist möglich und relativ einfach, auch wenn Sie Zertifikate zur Authentifizierung verwenden müssen (typisch in AWS-Umgebungen).
Der folgende Befehl kopiert Dateien von a
remotePath
aufserver2
direkt auf Ihren Computer unterlocalPath
. Intern wird die scp-Anfrage über weitergeleitetserver1
.Der umgekehrte Weg funktioniert auch (Datei hochladen):
Wenn Sie stattdessen die Kennwortauthentifizierung verwenden, versuchen Sie es mit
Wenn Sie auf beiden Servern dieselben Benutzeranmeldeinformationen verwenden:
quelle
Wenn Sie wirklich böse sein wollen, können Sie ssh und tar verketten, so etwas wie
tar c mydir | ssh server "ssh otherserver | tar x"
, aber dies kann in alle Hände von Problemen geraten.Am einfachsten wäre es, einen SSH-Tunnel mit den integrierten Methoden von SSH einzurichten. Schauen Sie sich den
-D
Switch in der Manpage an und leiten Sie einen Port an den SSH-Port des anderen Servers weiter.quelle
Sie können dies auch in umgekehrter Richtung tun und es ist vielleicht einfacher.
Angenommen, Sie haben eine SSH-Sitzung mit dem Computer geöffnet, an den Sie die Datei senden möchten. Diesen am weitesten entfernten PC nennen wir hop2. Ihr "Proxy" -Host ist hop1. Den PC, von dem die Datei stammt, nennen wir diesen Ursprung.
Sie können Tunnel erstellen, um einen lokalen Port auf einem Remote-PC verfügbar zu machen. Damit definieren wir einen Port, der auf dem Remote-PC geöffnet werden soll. Dies ist eine Weiterleitung zu dem Port, den Sie beim Bau des Tunnels mitgezogen haben.
Auf Hop2:
Jetzt können Sie in dieser geöffneten Tunnelsitzung dasselbe von hop1 bis file_origin tun.
Auf Hop1:
Sie werden nun von Hop2 zu Hop1 zum Ursprung getunnelt. Zufälligerweise sind nun beide Ports 5555 und 6666 für Origin geöffnet, die zu Port 22 von hop2 umgeleitet werden. In dieser Sitzung sind beide der folgenden gültigen scp-Routen zu hop2:
Auf herkunft:
Auf diese Weise können Sie eine beliebige Anzahl von Sprüngen dazwischen haben, und es ist einfacher, mit mehr als zwei Sprüngen zu arbeiten.
quelle
Versuchen Sie, das folgende Beispiel anzupassen: openssh config für ein Setup, das für mehrere Hosts verwendet werden kann:
Dies setzt eine Reihe von Servern voraus, die mit "uat-" beginnen und nur über den Jumpbox- / Gateway-Server "bastion-uat" erreichbar sind. Sie möchten wahrscheinlich auch hinzufügen,
ForwardAgent yes
wenn Sie einen Schlüssel zum Anmelden verwenden.quelle
ForwardAgent yes
dafür. Eine Agentenweiterleitung ist in diesem Fall nicht erforderlich, da auf der Bastion kein SSH-Client ausgeführt wird und die Weiterleitung eines Agenten, wenn er nicht benötigt wird, nur die Sicherheit verringert. Und ich denke,ssh
es fehlt in Ihrem Befehl. Wenn eine neueressh
Version verwendet wird, die Sie nicht benötigennc
, können Siessh -W %h:%p bastion-uat
stattdessen eingeben.Dies ist kein SCP (welches OP angefordert hat), aber ich fand es super einfach,
rsync
das Kopieren von lokal nach remote über einen einzigen Hop mit:Quelle: http://mjbright.blogspot.com/2012/09/using-rsync-over-multi-hop-ssh.html
Ich hatte den obigen -o ProxyPass-Vorschlag ausprobiert und wollte die Konfiguration nicht an meine veränderten Anforderungen anpassen. Wie der Autor im obigen Link angibt, ist die Zieldatei vor dem Doppelpunkt (:) wichtig, um anzugeben, dass sich der angegebene Pfad auf dem Zielserver befindet. Außerdem haben Sie mit rsync die Möglichkeit, Daten zu vergleichen, Ordner zu synchronisieren usw. Ich hoffe, dies hilft jemandem!
quelle
scp -o 'ProxyJump jumpboxname' somefilename.txt finaldestinationhost: / tmp /.
quelle