Ausführen von Mathematica auf einem Remote-Computer (mit Frontend und ssh)

Oct 13 2020

Ich habe versucht, meinen Mathematica-Code auf einem Remotecomputer auszuführen. Ich benutze Windows und der Remote-Computer ist ein Linux-Computer. Ich schreibe ein Notizbuch auf meinen lokalen Computer, konvertiere es in eine .m-Datei und verwende WinSCP, um es auf dem Remotecomputer abzulegen.

Ich habe versucht, über das Front-End eine Verbindung zum Remote-Computer herzustellen (https://reference.wolfram.com/language/howto/ConnectToARemoteKernel.html) bekam aber den Fehler: Der Kernel konnte keine Verbindung zum Frontend herstellen. (Fehler = MLECONNECT). Sie sollten versuchen, die Kernelverbindung außerhalb des Frontends auszuführen.

Also entschied ich mich, auf den Remote-Computer zu ssh und Code über die Kommandozeile auszuführen. Es würde jedoch keine meiner .m-Dateien ausgeführt. Es würde keinen Fehler geben, aber es würde auch keine Ausgabe geben. Ich habe mich entschlossen, die folgende Antwort zu versuchen, in der ich ein Shell-Skript erstelle: Remote-Kernel über SSH

Mit dem Exit-Code 65280 schlägt dies jedoch zusammen mit dem folgenden Fehler fehl : Fehlerhafter Port 'w'

Ich bin wirklich ziemlich verloren, was das Problem ist. Ich habe meine Firewall ohne Erfolg ausgeschaltet. Und wenn ich ein Mathematica-Skript auf die Maschine schreibe und es ausführe, funktioniert es. Ich habe versucht, eine VPN-Verbindung mit dem Remotecomputer herzustellen, habe dann jedoch den Fehler erhalten: Die Remoteverbindung wurde nicht hergestellt, da die versuchten VPN-Tunnel fehlgeschlagen sind . Gibt es grundlegende Überprüfungen, die ich durchführen sollte?

Ich wäre für jede Hilfe sehr dankbar.

Antworten

2 EdoardoBaldi Oct 15 2020 at 01:22

Ich wollte nur einen Kommentar posten, habe aber nicht genug Ruf. Ich habe dieses Thema in einem Beitrag der Wolfram Community besprochen . Ich habe dort meine Arbeitslösung geteilt (im Moment möchte ich sie ausführlicher testen), die darauf beruht, einen lokalen VPN-Server einzurichten und den Remotecomputer damit zu verbinden.


Aktualisieren

Wie von Artes in den Kommentaren vorgeschlagen, werde ich hier einige Details zu der Lösung bereitstellen, die in dem oben verlinkten Community-Beitrag besprochen wird.

Die Lösung, die ich beschreiben werde, beruht auf der Möglichkeit von beidem

  1. Installieren und Konfigurieren eines lokalen VPN- Servers (z. B. auf Ihrem Router)
  2. Installieren einer benutzerdefinierten Firmware auf Ihrem Router, die die Unterstützung des VPN-Servers aktiviert.

Ich würde sagen, dass es möglicherweise auch möglich ist, den Server an einer anderen Stelle im lokalen LAN einzurichten (z. B. auf einem Raspberry Pi), aber ich habe eine solche Lösung nicht getestet, und ich denke, dass die Gesamtkonfiguration ohne Berücksichtigung etwas abweichen kann der Engpass durch ein zusätzliches Gerät in der Mitte.

Ich kann keine ausführliche Anleitung zum Einrichten des VPN-Servers geben, da dies von der vorhandenen Hardware abhängt. Es gibt jedoch einen sehr ausführlichen Artikel, in dem die Installation und Konfiguration eines VPN-Servers auf Ihrem Router erläutert wird, einschließlich der Installation einer benutzerdefinierten Firmware (sofern Ihr Router dies unterstützt).

Davon abgesehen besteht das Verfahren aus drei Schritten:

  1. Einrichten des VPN-Servers: Installieren der OpenVPN-Pakete und Erstellen der Zertifikate und Schlüssel für den Server und die Clients
  2. Zusammenstellen eines OpenVPN-Konfigurationsprofils (einer profile.ovpnDatei) für Ihren Client. Sobald Ihr Server konfiguriert ist, erhalten Sie ein generisches Profil, zu dem Sie das in Schritt 1 erstellte Zertifikat und den Schlüssel hinzufügen müssen. Außerdem müssen Sie mindestens zwei Benutzeranmeldeinformationen (Benutzername / Kennwort) für Ihren Server erstellen Client: Dies kann während der Serverkonfiguration erneut durchgeführt werden.
  3. Installieren des VPN-Clients auf Ihrem Remotecomputer und Herstellen einer Verbindung zum Server. Normalerweise ist das Herstellen einer Verbindung so einfach wie das Ausgeben eines openvpn --config profile.ovpnauf Ihrem Server.

Eine Einschränkung ist die folgende: Wenn Sie über SSH mit Ihrem Server verbunden sind, ist es sehr wahrscheinlich, dass Ihre Verbindung unterbrochen wird. Der Grund dafür ist, dass der OpenVPN-Server das Standard-Gateway auf dem Server ändert: Die Route von Ihrem lokalen Computer zum Server bleibt unverändert, aber der Datenverkehr vom Server zum lokalen Computer wird jetzt über das VPN-Gateway geleitet. Dies ist eine verkürzte Erklärung: Ich denke nicht, dass dies der richtige Ort ist, um die Netzwerkdetails zu erklären, die Sie beispielsweise hier finden . Es gibt jedoch eine schnelle Lösung für dieses Problem. Weisen Sie den Server vor dem Starten des VPN-Clients an, nicht den gesamten Datenverkehr über das VPN, sondern über das vorherige Gateway mit einer ähnlichen Funktion zu leiten route add -host <public IP local machine> gw <default gateway server>.

Die vorherige Lösung basiert auf einer statischen öffentlichen IP-Adresse, die Ihrer lokalen Internetverbindung zugeordnet ist. Wenn dies nicht der Fall ist, können Sie mit einem dynamischen DNS-Dienst umgehen und gleichzeitig Ihren VPN-Server immer erreichbar machen.

Sobald auf der VPN-Seite alles eingestellt ist - Server läuft und Remotecomputer ist verbunden -, hat Ihr Remotecomputer eine neue IP-Adresse in dem vom VPN-Server erstellten Subnetz. Dies ist die Adresse, die Sie im Profil "Kernel-Konfiguration" in Wolfram Mathematica / Desktop verwenden sollten. Auf meinem lokalen Computer (entweder MacOS oder ein Ubuntu-Laptop mit Wolfram Desktop 12.1) verwende ich SSH des Systems, um die Verbindung herzustellen. Hier ist zum Beispiel eine andere Antwort, die zeigt, wie es geht.

Als abschließende Bemerkung wies ein Kollege von mir auf dieses praktische Programm in Python hin sshuttle, das eine funktionierende Alternative sein könnte, deren Einrichtung viel weniger aufwändig ist als die eines vollwertigen OpenVPN-Servers. Ich möchte es auch versuchen, habe es aber noch nicht getan.

Ich hoffe, diese zusätzlichen Details machen die Antwort nützlicher.