Ich möchte auf einen Computer zugreifen, z. B. auf Computer A, der sich im Netzwerk meiner Universität befindet. Auf diesen Computer kann jedoch nur über das interne Netzwerk der Universität zugegriffen werden. Daher kann ich SSH nicht für diesen Computer von zu Hause aus direkt verwenden.
Folgendes mache ich jetzt:
Melden Sie sich bei einem anderen Universitätscomputer an, z. B. Computer B
(Auf diesen Computer B kann über SSH von meinem Heimcomputer aus zugegriffen werden.)
Verwenden Sie SSH auf B, um eine Verbindung zu A herzustellen.
Gibt es eine Möglichkeit, das schneller zu machen? Verwenden Sie nur einen ssh-Befehl.
networking
ssh
remote-access
tunnel
Nikosdi
quelle
quelle
Antworten:
Ja,
ProxyCommand
in deiner SSH-Konfiguration verwenden.Erstellen Sie eine SSH-Konfigurationsdatei in Ihrem Ausgangsverzeichnis (es sei denn, Sie möchten dies systemweit vornehmen)
~/.ssh/config
:Jetzt können Sie Maschine A direkt über erreichen
Beachten Sie auch, dass Sie jetzt einen einzigen SSH-Host-Zielnamen dafür haben und diesen auch in anderen Anwendungen verwenden können. Z.B:
SCP zum Kopieren von Dateien.
In Ihren GUI-Anwendungen:
Verwendung
sftp://user@internalmachine/
als Standort auf der Maschine zu suchen.KDE-basiert (Dolphin): verwenden
fish://user@internalmachine/
Anmerkungen
Ändern Sie
hostname.or.IP.address.internal.machine
und den Port (22
) zu der Maschine, die Sie erreichen möchten, als würden Sie von derunibroker
Maschine.Abhängig von den Netcat-Versionen auf dem Unibroker-Host muss die
-q0
Option weggelassen werden. In Bezug auf die Authentifizierung; Sie richten im Grunde genommen zwei SSH-Verbindungen von Ihrer Workstation aus ein. Dies bedeutet, dass sowohl der Unibroker-Host als auch der Host der internen Maschine nacheinander überprüft / authentifiziert werden (sowohl für die Schlüsselpaar- / Kennwort- als auch die Hostschlüsselüberprüfung).Erläuterung
Dieser Ansatz der Verwendung von
ProxyCommand
und 'Netcat' ist nur eine Möglichkeit, dies zu tun. Dies gefällt mir, weil mein SSH-Client direkt mit dem Zielcomputer kommuniziert, sodass ich den Hostschlüssel von meinem Client aus überprüfen und meine Authentifizierung mit öffentlichem Schlüssel verwenden kann, ohne einen anderen Schlüssel für den Broker zu verwenden.Jedes
Host
definiert den Beginn eines neuen Host-Abschnitts.Hostname
ist der Ziel-Hostname oder die IP-Adresse dieses Hosts.User
ist das, was Sie als Benutzer angeben würdenssh user@hostname
.ProxyCommand
wird als Pipe zum Zielrechner verwendet. Durch die Verwendung von SSH auf dem ersten Computer und die direkte Einrichtung eines einfachen 'netcat' (nc
) für das Ziel von dort ist dies im Grunde genommen nur ein Klartext, der vom Broker an den internen Computer weitergeleitet wird. Sie haben die-q
Möglichkeit, alle Ausgaben stummzuschalten (nur eine persönliche Präferenz).Stellen Sie sicher, dass Sie netcat auf dem Broker installiert haben (normalerweise standardmäßig unter Ubuntu verfügbar) - entweder netcat-openbsd oder netcat-traditional .
Beachten Sie, dass Sie hier immer noch zweimal SSH mit Verschlüsselung verwenden. Während der Netcat-Kanal Klartext ist, richtet Ihr SSH-Client auf Ihrem PC einen weiteren verschlüsselten Kanal mit dem endgültigen Zielcomputer ein.
quelle
Hop in one go
Eine naheliegende Alternative zum ProxyCommand-Ansatz, den ich in meiner anderen Antwort angegeben habe , ist das direkte "Springen " zum Zielcomputer:
Beachten Sie den
-t
beim erstenssh
Befehl. Ohne es wird es scheitern:Dadurch wird die Zuweisung eines echten TTY erzwungen
Der Nachteil ist, dass jetzt die gesamte Konfiguration, Überprüfung und Authentifizierung auf Maschine B stattfindet, was mir aus Sicherheitsgründen in meiner Situation nicht gefällt. Ich mag mein Schlüsselpaar auf meinem eigenen PC und authentifiziere und verifiziere den endgültigen Zielcomputer von meinem eigenen PC aus. Außerdem können Sie die interaktive Shell nur für SSH verwenden, sodass andere Tools wie SCP oder die Verwendung Ihres GUI-Dateimanagers hiervon nicht betroffen sind.
Aus all den oben genannten Gründen empfehle ich dringend den ProxyCommand-Ansatz , aber für eine schnelle Verbindung funktioniert dies einwandfrei .
quelle
Sie können die
-J
Befehlszeilenoption verwenden:Von
man ssh
:Es wurde in OpenSSH Version 7.3 (veröffentlicht im August 2016) eingeführt. Es ist in Ubuntu 16.10 und höher verfügbar.
quelle
Versuchen Sie es mit
in Ihrer ~ / .ssh / config und erledigen Sie alles auf einmal mit Schlüsseln, die sich nur auf Ihrem Computer befinden.
quelle
B
Computer vorhanden sein.Dies ist ein sehr hilfreicher Vorschlag. Nachdem ich stundenlang herumgespielt hatte, fand ich diese Notiz und bestätigte, dass dies genauso funktioniert wie dokumentiert. So stellen Sie von der entfernten Maschine aus eine Verbindung zwischen Maschine A und Maschine B her:
zB: [xuser @ machineC ~] ssh -t MachineA ssh MachineB
Das "-t" ist kritisch, ssh schlägt fehl, wenn es nicht vorhanden ist. Sie werden zweimal aufgefordert, zuerst das Kennwort für MachineA und dann das zweite Mal für MachineB einzugeben. Beachten Sie außerdem, dass Sie auf allen drei Computern den Benutzer "xuser" definiert haben. Wenn nicht, verwenden Sie einfach die ssh-Syntax: "yuser @ MachineA ...". Beachten Sie auch, dass Sie bei Bedarf gepunktete Quad-Raw-IP-Adressen verwenden können. Dies ist nützlich, wenn Sie eine Verbindung über ein privates lokales Netz herstellen, das IPs verwendet, die nicht der Welt ausgesetzt sind - d. H. nicht in Ihrer lokalen Host-Datei oder einem DNS. Um eine Datei von MachineB zu Remote-MachineC zu übertragen, können Sie von MachineB zu MachineA und dann von MachineA zu Remote-MachineC scp. (ZB kann die entfernte MaschineC MaschineA anpingen, aber nicht MaschineB.) Vorsichtsmaßnahme: Ich habe Fedora und WindowsXP getestet. MaschineA ist eine XP-Box, auf der ICS (Internet Connection Sharing) ausgeführt wird. während MachineB und Remote MachineC Fedora-Linux-Boxen sind. Dieser Vorschlag löste ein Schlüsselproblem für mich - dh. eingeschränkter, überwachter Remote-Zugriff auf mein Remote-Site-LAN Beachten Sie auch, dass beim "Abmelden" von ComputerB zwei "Verbindung zu xxx.xxx.xxx.xxx geschlossen" angezeigt werden sollten. Mitteilungen.
quelle
-t
aber noch benötigt.ProxyCommand ist eine saubere Lösung für den Fall, dass Sie den Shell-Zugriff auf beiden Systemen zulassen. Wir wollten Remotebenutzern über einen Broker (B) Zugriff auf einen internen Computer (A) gewähren, ohne dem Benutzer aus Sicherheitsgründen einen Shell-Zugriff auf B zu gewähren. Das hat funktioniert:
Ersetzen Sie die Anmeldeshell
Ersetzen Sie die Login-Shell (verwenden
chsh
) fürextuser
den Broker durch das folgende Skript (in einer Datei gespeichert):Sofern in extuser @ B für den Remote-Benutzer und in internaluser @ A für extuser @ B kein Kennwort-Login eingerichtet wurde, wird der Remote-Benutzer durch Ausführen des folgenden Befehls direkt zu A weitergeleitet
Tipp : Erstellen Sie das erforderliche Setup für die Anmeldung ohne Kennwort authorized_keys in extuser @ B, bevor Sie zur benutzerdefinierten Anmeldeshell wechseln. Nach der Änderung kann nur ein sudoer @ B Änderungen an der Datei authorized_keys vornehmen, indem er sie direkt bearbeitet, da auf dieses Konto über eine Shell für niemanden zugegriffen werden kann.
In der letzten Zeile wird die Anzeige des Anmeldebanners von B unterdrückt, sodass der Remote-Benutzer einen transparenten Zugriff auf A hat.
quelle
Du meinst du brauchst mehrere Jumper :)
Vor kurzem habe ich dieses Problem mit Jumper1 Jumper2 und meiner letzten Maschine, wie für mein Sol getroffen
lokales Skript:
Dann habe ich auf dem 1. Jumper (das ist mein Router) ein Skript namens Y00.sh platziert:
Sie können diese mit Ihrer IP und Ihren Passwörtern ersetzen, viel Glück!
quelle