Ich weiß, dass dies eine späte Antwort ist, aber ich habe gerade einen coolen Weg gefunden, dies zu tun. Das ist im Grunde die Antwort von Holger Just, aber in einer gespeicherten Konfigurationsdatei:
Sie müssen dies in Ihrer ~/.ssh/config
Datei auf local.machine ablegen (Erstellen der Datei, falls sie nicht vorhanden ist).
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
Nach dem Speichern der Datei können Sie einfach verwenden
ssh target.machine
Sie können jederzeit eine Verbindung herstellen. SCP wird auch funktionieren, da es auch die ssh-Konfigurationsdatei respektiert. Dies gilt auch für Nautilus, wenn Sie GNOME verwenden und eine GUI verwenden möchten.
Host proxy.machine
Zeilen in derselben~/.ssh/config
Datei anzeigen würden. 2) Erwähnen Sie, ob diese Befehle verschachtelt werden können (dh, der Client stellt eine Verbindung zum Proxy-Host 1 her, der eine Verbindung zum Proxy-Host 2 herstellt. ..target) und 3) wasnc %h %p
bedeutetSie können dies mit einem einzigen Befehl tun, aber Sie müssen netcat (nc) auf dem Proxy-Computer installiert haben:
[EDIT: Reihenfolge der Maschinen vertauscht ...]
quelle
Sie können dies jetzt * als Einzeiler tun, ohne
nc
irgendwo etwas zu benötigen :Erläuterung
pcreds
undtcreds
stellen Sie Ihre Proxy - und Ziel - Anmeldeinformationen bei Bedarf (username
,username:password
usw.).Dies ist aufgrund einer eingebauten netcat-ähnlichen Funktion möglich, die die Anforderung für
nc
den Zwischenhost beseitigt . Mitssh -W host:port
wird ein Tunnel zu dem angegebenen Host und Port eingerichtet und mit stdin / stdout verbunden. Anschließend wirdscp
der Tunnel durchlaufen.Die
%h
und%p
inProxyCommand
werden durch den von Ihnen angegebenen Zielhost und -port ersetzt.Für noch mehr Komfort können Sie den Proxy in Ihrer ssh-Konfiguration konfigurieren:
und von da an einfach tun
* seit OpenSSH 5.4 - veröffentlicht im März 2010
quelle
-p <portnum>
vor der-W
in beiden Methoden anzugeben, den Proxy-PortWenn es Ihnen nichts ausmacht, rsync anstelle von scp zu verwenden, können Sie den folgenden Einzeiler verwenden:
(Sie benötigen einen passwortlosen Zugang zum Proxy-Rechner)
quelle
OK, eigentlich zwei Befehle ...
quelle
8080
-p <portnumber>
zu IhremEin Einzeiler? Nicht über meinen Kopf. Sie müssen zuerst einen Proxy einrichten und können dies nicht mit scp selbst tun.
Wenn ich es manuell mache, öffne ich eine Bildschirmsitzung für meinen Tunnel:
screen -S tunnel
Screen wird verwendet, um den Tunnel in einer Hintergrund-Shell laufen zu lassen. Verwenden Sie eine beliebige Technik, um den Tunnel im Hintergrund offen zu halten (die Antwort von @ weeheavy ist wahrscheinlich die einfachste). Einmal in der Screen Session starte ich meinen Tunnel so
ssh -L 2222:target.machine:22 [user@]proxy.machine
Um das aufzuschlüsseln, heißt es im Grunde: "Auf meinem lokalen Computer öffnen Sie Port 2222 und alle Verbindungen, die localhost: 2222 treffen, werden über proxy.machine an target.machine: 22 weitergeleitet."
Sobald Sie die SSH-Verbindung und den Tunnel hergestellt haben, trennen Sie die Bildschirmsitzung mit "Ca d". Geben Sie ein, um zu dieser Bildschirmsitzung zurückzukehren
screen -raAd tunnel
Sobald Sie wieder in Ihrer ursprünglichen Shell sind, wird Ihr scp-Befehl so aussehen
scp -P 2222 localhost:your/file/on/target.machine local/path
Denken Sie daran, dass der localhost-Port 2222 wirklich nur ein Tunnel ist, der zur target.machine führt.
quelle
Scheint, dass scp die Option "-o" genau wie ssh unterstützt, obwohl ich nicht sicher bin, wie ich einen Proxy-Benutzernamen / ein Proxy-Passwort übergeben soll:
Wenn Sie erhalten,
nc: invalid option -- X
sehen Sie https://stackoverflow.com/a/23616021/32453quelle
Wie wäre es mit:
quelle
Sie könnten versuchen, etwas wie:
Es funktioniert jedoch nicht, wenn Ihre proxy.machine Sie nach dem Kennwort fragen muss (SSH ist nicht in einem TTY enthalten, daher schlägt askpass fehl).
Wenn Sie mehr als eine Datei haben, können Sie tar wie folgt verwenden (ungetestet, ich verwende normalerweise ein Netcat so):
quelle
Eine weitere einfache Lösung , die eine Übertragung source_file vom source_host zu einem destination_host über ein proxy_host :
Melden Sie sich am Proxy-Server an :
Von dem Proxy - Server, übertragen Sie die source_file vom source_host zum destination_host (Sie können diese Art als eine Zeile, das Weglassen des
\
, oder als zwei Linien, wie unten dargestellt):Dies setzt voraus, dass die Anmeldung am source_host am proxy_host einen rsa_key verwendet.
quelle
Falls Sie öffentliche Schlüssel benötigen, benötigen Sie so etwas.
quelle
Ich folgte diesem Artikel und fand eine Antwort, die für mich arbeitet. (Weil die obigen Antworten für mich nicht funktionieren).
So
scp
erstellen Sie eine Datei über einen Zwischenhost (auch Sprunghost genannt): http://mperdikeas.github.io/networking.html.files/scp-a-file-through-jump-host.htmlUnd meine Antwort ist wie folgt:
Beispiel:
Ich hoffe diese Antwort konnte Ihnen helfen.
quelle