Exécuter Mathematica sur une machine distante (à l'aide du frontend et de ssh)
J'ai essayé d'exécuter mon code Mathematica sur une machine distante. J'utilise Windows et la machine distante est une machine Linux. J'écris un ordinateur portable sur ma machine locale, je le convertis en fichier .m et j'utilise WinSCP pour le mettre sur la machine distante.
J'ai tenté de me connecter à la machine distante via le frontal (https://reference.wolfram.com/language/howto/ConnectToARemoteKernel.html) mais a obtenu l'erreur: le noyau n'a pas réussi à se connecter au frontal. (Erreur = MLECONNECT). Vous devriez essayer d'exécuter la connexion du noyau en dehors du front-end.
J'ai donc décidé de ssh sur la machine distante et d'exécuter le code via la ligne de commande. Cependant, aucun de mes fichiers .m ne fonctionnerait. Il n'y aurait pas d'erreur, mais il n'y aurait pas non plus de sortie. J'ai décidé d'essayer la réponse suivante, où je crée un script shell: noyau distant via SSH
Mais il échoue avec le code de sortie 65280 , parallèlement à l'erreur suivante: mauvais port 'w'
Je ne sais vraiment pas quel est le problème. J'ai désactivé mon pare-feu en vain. Et si j'écris un script Mathematica sur la machine et que je l'exécute, cela fonctionne. J'ai tenté d'établir une connexion VPN avec la machine distante, mais j'ai ensuite obtenu l'erreur: la connexion à distance n'a pas été établie car les tunnels VPN tentés ont échoué . Y a-t-il des vérifications de base que je devrais faire?
Je serais extrêmement reconnaissant pour toute aide.
Réponses
Je voulais juste poster un commentaire mais je n'ai pas assez de réputation. J'ai discuté de ce sujet dans un article de la communauté Wolfram . J'y ai partagé ma solution de travail (pour le moment, je souhaite la tester plus en détail) qui repose sur la mise en place d'un serveur VPN local et la connexion de la machine distante à celui-ci.
Mettre à jour
Comme suggéré par Artes dans les commentaires, je fournirai ici quelques détails sur la solution discutée dans le post de la communauté lié ci-dessus.
La solution que je vais décrire repose sur la possibilité soit
- installer et configurer un serveur local VPN (par exemple, sur votre routeur)
- installer un micrologiciel personnalisé sur votre routeur qui active la prise en charge du serveur VPN.
Je dirais qu'il pourrait également être possible de configurer le serveur ailleurs sur le LAN local (par exemple, sur un Raspberry Pi), mais je n'ai pas testé une telle solution et je suppose que la configuration globale pourrait différer un peu, sans considérer le goulot d'étranglement résultant d'un dispositif supplémentaire fonctionnant au milieu.
Je ne suis pas en mesure de donner un guide détaillé sur la configuration du serveur VPN car cela dépend du matériel dont vous disposez. Pourtant, il existe un article très complet qui explique la procédure d'installation et de configuration d'un serveur VPN sur votre routeur, y compris l'installation d'un firmware personnalisé (si votre routeur le prend en charge).
Cela étant dit, la procédure se résume à trois étapes:
- Configuration du serveur VPN: installation des packages OpenVPN et création des certificats et clés à la fois pour le serveur et le (s) client (s)
- Créer un profil de configuration OpenVPN (un
profile.ovpnfichier) pour votre client. Une fois votre serveur configuré, il vous fournit un profil générique auquel vous devez ajouter le certificat et la clé que vous avez créés à l'étape 1. Vous devrez également créer au moins une paire d'identifiants utilisateur (nom d'utilisateur / mot de passe) pour votre client: cela peut être refait lors de la configuration du serveur. - Installation du client VPN sur votre machine distante et connexion au serveur. Normalement, la connexion est aussi simple que d'émettre un
openvpn --config profile.ovpnsur votre serveur.
Une mise en garde est la suivante: si vous êtes connecté à votre serveur via SSH, il est très probable que votre connexion soit interrompue. La raison en est que le serveur OpenVPN changera la passerelle par défaut sur le serveur: la route de votre machine locale vers le serveur reste inchangée, mais le trafic du serveur vers la machine locale passe désormais par la passerelle VPN. Ceci est une explication abrégée: je ne pense pas que ce soit le bon endroit pour expliquer les détails du réseau que vous pouvez trouver, par exemple, ici . Pourtant, il existe une solution rapide à ce problème. Avant de démarrer le client VPN, dites au serveur de ne pas acheminer tout le trafic via le VPN mais via la passerelle précédente avec quelque chose comme route add -host <public IP local machine> gw <default gateway server>.
La solution précédente repose sur une adresse IP publique statique associée à votre connexion Internet locale. Si ce n'est pas le cas, un moyen de gérer le problème et de rendre votre serveur VPN toujours accessible consiste à utiliser un service DNS dynamique.
Une fois que tout est réglé du côté VPN - serveur en cours d'exécution et machine distante connectée - votre machine distante aura une nouvelle adresse IP dans le sous-réseau créé par le serveur VPN. C'est l'adresse que vous devez utiliser dans le profil "Configuration du noyau" dans Wolfram Mathematica / Desktop. Sur ma machine locale (macOS ou un ordinateur portable Ubuntu avec Wolfram Desktop 12.1), j'utilise le SSH du système pour établir la connexion. Voici , par exemple, une autre réponse qui montre comment le faire.
En guise de conclusion, un de mes collègues a souligné ce programme pratique écrit en Python appelé sshuttlequi pourrait être une alternative fonctionnelle beaucoup moins élaborée à mettre en place qu'un serveur OpenVPN à part entière. Je veux aussi l'essayer mais je ne l'ai pas encore fait.
J'espère que ces détails supplémentaires rendront la réponse plus utile.