NotionSSH - Contrôlez des serveurs distants avec Notion, même sans VPN
(github.com/mirseo)Quand on développe, il arrive qu’à cause de contraintes de sécurité, certains environnements autorisent l’accès à des sites en http/https mais n’ouvrent pas SSH ni RDP.
Je l’ai donc créé.
Avec ce projet appelé NotionSSH, si vous saisissez quelque chose comme !(docker ps) dans Notion,
un programme Rust simple l’exécute dans un shell sur la machine qui surveille la page concernée, puis renvoie le résultat.
C’est encore une version initiale, donc il peut y avoir beaucoup de bugs.
N’hésitez pas à l’utiliser largement !
34 commentaires
Je suis désolé pour ma réponse tardive !
Je n’ai pas d’excuse. Je suis heureux que le premier projet que j’ai vraiment développé dans une optique open source ait attiré l’attention, mais je pense avoir eu peur en recevant trop de remarques via mon e-mail personnel et divers autres réseaux sociaux externes.
À cause de cela, j’ai pris la décision précipitée de rendre le projet privé pendant 3 jours. Je suis vraiment désolé de vous avoir déçus par cette décision hâtive.
Je prendrai cet épisode comme une bonne expérience et je continuerai à améliorer mes projets open source à l’avenir. Merci !!
Il existe aussi un gateway de bureau à distance appelé guacamole (https://guacamole.apache.org/)
Désolé pour la réponse tardive !
Je l’avais utilisé auparavant, mais comme le VNC est intrinsèquement lent, j’avais été beaucoup affecté par la latence et les délais de réponse.
J’ai donc fini par le créer en cherchant à concevoir une nouvelle méthode de remplacement, merci !!
2025 | Développement de NotionSSH (2.0), un pont SSH basé sur Rust (https://github.com/mirseo/notionSSH) <- non pris en charge et supprimé
Vous l’avez indiqué ainsi... Il vaudrait mieux répondre ici ou supprimer la news.
Je suis désolé pour la réponse tardive !
J’ai récemment reçu beaucoup de remarques concernant des problèmes de sécurité, et je me suis donc longuement demandé s’il fallait continuer à rendre ce dépôt public.
J’avais alors, sans préavis, changé sa visibilité en privé.
Je suis sincèrement désolé de vous avoir déçus par cette décision précipitée. Je vais m’efforcer de devenir un développeur encore meilleur. Merci.
Pour le moment, je prévois un calendrier de développement supplémentaire et j’ai remis le dépôt en public. Merci pour vos retours !!
Plusieurs développeurs ont parlé de sécurité et partagé des conseils, et comme il y a plus de 27 commentaires, je pense que ce post n’est plus seulement le mien...
Cela dit, s’il y a un bouton pour supprimer le post, j’imagine que chacun est libre de le faire, haha. Je n’ai encore jamais publié de post, donc je me demande si la suppression est possible.
Désolé pour ma réponse tardive !
En réalité, j’avais envisagé de supprimer le post, mais comme je n’ai pas trouvé le bouton de suppression, il semble qu’il soit simplement resté tel quel…
Je suis désolé.
Puisque tout le monde a donné son avis, ce n’était pas seulement mon post, et je pense avoir pris cette décision tout seul de manière trop précipitée.
Et j’ai aussi eu peur. Je découvrais à peine la communauté, et sur plusieurs plateformes ainsi que par e-mail, on n’arrêtait pas de me dire que ce projet présentait un risque de sécurité bien trop important… Mentalement, j’ai été très secoué. Désolé.
Pourquoi l’accès au dépôt ne fonctionne-t-il pas ?
Je suis désolé que la réponse de DeepByun ait été tardive !!
Récemment, comme cela a souvent été signalé pour des problèmes de sécurité,
je me suis longuement demandé s’il fallait continuer à rendre ce dépôt public ou non,
et je l’ai donc temporairement basculé en privé sans préavis.
Je suis sincèrement désolé de vous avoir déçus par cette décision précipitée, et je ferai de mon mieux pour devenir un développeur encore meilleur à l’avenir. Merci.
Si le problème est que SSH ne fonctionne pas parce que vous ne pouvez pas ouvrir le port 22, il existe aussi des méthodes comme changer le port SSH ou utiliser Cloudflare Tunnel.
C’est ça ! Mais l’endroit où je travaille bloque carrément le protocole SSH au niveau du pare-feu, donc je n’ai pas vraiment le choix !
J’ai aussi essayé Cf tunnel et Tailscale, mais on m’a dit que cela pourrait enfreindre le règlement, donc j’utilise prudemment un shell externe :) ( Après avoir demandé, l’équipe sécurité de l’école m’a répondu que seuls les flux entrants/sortants en HTTP/HTTPS sur les ports 80 et 443 sont approuvés )
En réalité, l’approbation est possible, mais la procédure est fastidieuse et la réglementation associée est complexe, donc j’ai créé cette méthode.
Si j’étais dans l’équipe sécurité, je pense que je bloquerais ça immédiatement dès que j’en entendrais parler...
S’il existe une procédure et qu’une approbation est possible, le contourner serait encore plus problématique.
On appelle ça du Shadow IT.
Oui, c’est possible 🙂
Mais l’objectif de ce projet n’était pas vraiment de l’utiliser en pratique ; c’était surtout de me dire : « et si ça existait ? » !
Du coup, je l’ai réalisé comme side project !!
À strictement parler, c’est du RCE. C’est extrêmement dangereux. Il n’y a aucune validation du point de vue de la sécurité, n’est-ce pas ? On parle d’un agent exécuté sur le serveur qui lance périodiquement des commandes provenant d’une page externe. Et dans ce processus, cette page externe reçoit une confiance inconditionnelle, sans aucune vérification. Même en utilisant l’API de Notion… hum, c’est risqué.
J’ai ajouté des dispositifs de sécurité !
Vérification de l’AC — configuration en 3 étapes : 1. vérification de la chaîne de certificats de l’AC, 2. vérification DNS DoH (cf, google), 3. pinning de certificat (vérification de la clé publique)
Ajout d’ACL (ajout du contrôle des autorisations d’utilisation des commandes par compte selon l’e-mail de l’utilisateur + ajout du contrôle des autorisations basé sur les équipes)
Blocage par défaut des commandes qui ne figurent pas dans Allow
Hum... oui, c’est vrai.
Pour l’instant, c’est une version initiale, donc je prévois d’ajouter dans une prochaine version une fonctionnalité qui bloque l’exécution en fonction du nom de compte.
(Je compte utiliser le nom de compte récupéré via NotionAPI, limiter les comptes pouvant être exécutés via des variables d’environnement système, et ajouter une couche d’autorisations !!)
Le renforcement de la sécurité sera probablement la priorité !!
J’ai une question parce que je ne suis pas sûr d’avoir bien compris :
Par ailleurs, comme je considérais que l’objectif de SSH lui-même était de fournir un accès shell sécurisé, j’ai donné le nom SSH à cette approche, car l’accès shell en lui-même reste sécurisé avec cette méthode, puisque l’architecture est de type ( serveur - serveur Notion - utilisateur ) !
Hum... oui, c’est vrai. À l’origine, c’était en fait un projet basé sur l’échange de clés, mais pendant le développement, j’ai changé d’approche pour utiliser une page Notion comme interface de lecture. Pourquoi ? Parce que demander à l’utilisateur un échange de clés puis gérer l’authentification augmentait la difficulté d’implémentation, et surtout ce n’était pas vraiment adapté à Notion. (Version initiale 1.0 non publiée — cette version utilisait un système d’échange de clés et était destinée à Discord, mais c’était peu pratique, au point que j’ai fini par ne plus l’utiliser moi-même. Et comme il s’agissait d’un mot de passe, ce n’était pas vraiment idéal de le rendre public dans Notion non plus.) Merci pour cette bonne remarque ! Il est possible que le nom du projet change plus tard.
Projet assez étonnant. Y a-t-il une raison particulière pour laquelle vous avez choisi Notion ?
Oui ! En fait, j’ai entendu dire que Notion est beaucoup utilisé en contexte professionnel, et dans mon cas, je l’ai choisi parce que je m’en sers pour mettre en ligne et organiser des données.
J’ai aussi opté pour Notion parce que Discord, l’e-mail et Slack me semblaient peu pratiques du point de vue de l’usage de l’API et de la prise en charge des blocs de code, notamment dans un environnement avec plusieurs écrans.
En dehors de cela, pour le partage des résultats d’exécution et dans une logique centrée sur l’entreprise, le choix de Notion, pratique pour la collaboration, visait aussi à permettre à l’équipe informatique de l’entreprise d’intervenir rapidement pour résoudre les problèmes lorsqu’elle apporte son support à des équipes comme le design.
Vous avez aussi pris en compte des cas d’usage concrets, mais pour les connexions SSH, certaines ne sont possibles que sur un réseau fermé. Comme l’accès à Internet n’y est pas disponible, je pense qu’on ne pourra pas utiliser Notion :(
Ah… je n’avais pas pensé à ce point-là.
En fait, pour un serveur où la sécurité est essentielle, je pense qu’une solution comme Tailscale serait plus sûre que cette approche !!
Merci pour cet avis !!
Oups… comme j’ai publié ça depuis mon mobile ce matin en allant à l’école, je ne me suis même pas rendu compte qu’il y avait des fautes de frappe.
Passez tous une excellente journée :)
À l’époque où je bidouillais un peu le hacking sur Hacker School, on disait que les webshells étaient une énorme faille de sécurité......
Un shell Notion, alors là le responsable sécurité va faire une syncope.
Ah ahah... les fonctionnalités pratiques ont toujours leur lot de compromis... (...)
Euh... ça pourrait peut-être fonctionner un peu comme un webshell.
Bon, au moins, il y a des logs côté sécurité... donc si ces logs sont bien conservés, on pourra peut-être le détecter...?
Je n’avais pas réalisé que ça pouvait aussi servir de webshell.
Merci de me l’avoir signalé !!
!(rm -rf /)
Dans la dernière version, des fonctionnalités de sécurité ont été ajoutées !
Un ACL a été ajouté, ce qui fait que, dans les configurations de sécurité, les commandes comme
rmsont désormais bloquées par défaut !Ah… il va falloir limiter les permissions, là, non… ?
Il faudra peut-être ajouter
SecureConfigdans la prochaine version…Merci de l’avoir signalé !!
C’est une idée marrante, haha
https://crates.io/crates/iroh-ssh/0.1.1 il y a aussi ce genre de chose
Oh... c’est intriguant, non ?! En voyant ça, je vais essayer d’y apporter encore des améliorations
La version à laquelle je réfléchis en ce moment consistait à ajouter une fonctionnalité P2P à NotionSSH
Vous venez justement de me faire découvrir quelque chose de bien, merci :)