Pourquoi ne puis-je pas accéder au serveur Jupyter Notebook distant?

90

J'ai démarré un serveur Jupyter Notebook sur mon serveur centos6.5 et jupyter fonctionne comme

[I 17:40:59.649 NotebookApp] Serving notebooks from local directory: /root
[I 17:40:59.649 NotebookApp] 0 active kernels 
[I 17:40:59.649 NotebookApp] The Jupyter Notebook is running at:https://[all ip addresses on your system]:8045/
[I 17:40:59.649 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

Lorsque je veux accéder à Jupyter à distance dans le même réseau local, disons ouvert http://192.168.1.111:8045/, je ne peux pas du tout ouvrir une page Jupyter. En passant, je peux accéder au serveur centos distant avec succès.

Quelle est la raison possible?

Peng He
la source

Réponses:

143

Avez-vous configuré le fichier jupyter_notebook_config.py pour autoriser les connexions externes?

Par défaut, Jupyter Notebook n'accepte que les connexions de l'hôte local (par exemple, du même ordinateur sur lequel il s'exécute). En modifiant l' option NotebookApp.allow_origin de la valeur par défaut «» à «*», vous autorisez l'accès à Jupyter en externe.

c.NotebookApp.allow_origin = '*' #allow all origins

Vous devrez également modifier les adresses IP sur lesquelles le notebook écoutera:

c.NotebookApp.ip = '0.0.0.0' # listen on all IPs


Voir également les détails dans une réponse ultérieure dans ce fil.

Documentation sur le fichier de configuration de Jupyter Notebook.

James023
la source
9
En utilisant jupyter avec, jupyter notebook --ip 0.0.0.0vous pouvez décider de l'exécution avec le même résultat, mais sans avoir besoin d'un fichier de configuration.
janniks le
Une autre idée supplémentaire? J'ai essayé littéralement toutes les réponses disponibles sur cette question, et aucune d'elles n'a fonctionné pour moi. J'ai défini les configurations, autorisé les accès externes, autorisé toutes les adresses IP et toutes les origines ... toujours une connexion refusée. Je ne comprends pas pourquoi cela doit être si difficile. Utiliser Windows me dérange vraiment.
Lucas Lima
72

J'ai réussi à obtenir l'accès à mon serveur local par ip en utilisant la commande ci-dessous:

jupyter notebook --ip xx.xx.xx.xx --port 8888

remplacez le xx.xx.xx.xxpar votre adresse IP locale du serveur jupyter.

Teo Kok Keong
la source
26
J'ai utiliséjupyter notebook --ip 0.0.0.0 --port 8888
Talha Junaid
1
0.0.0.0permettra l'accès au notebook sur toutes les interfaces réseau, pas seulement sur localhost. Si vous l'exécutez et y accédez sur la même machine, ou si vous exécutez un serveur comme nginx devant lui, vous devriez le limiter à 127.0.0.1seulement
theferrit32
Aussi, si vous utilisez une instance cloud comme EC2, assurez-vous de modifier votre groupe de sécurité pour autoriser le trafic entrant sur le port 8888.
Mad Scientist
34

James023 a déjà donné la bonne réponse. Il suffit de le formater

si vous n'avez pas déjà configuré le fichier jupyter_notebook_config.py

Étape 1: générer le fichier en tapant cette ligne dans la console

jupyter notebook --generate-config

Étape 2: modifiez les valeurs

gedit  /home/koushik/.jupyter/jupyter_notebook_config.py

(ajoutez les deux lignes suivantes n'importe où car les valeurs par défaut sont quand même commentées)

c.NotebookApp.allow_origin = '*' #autoriser toutes les origines

c.NotebookApp.ip = '0.0.0.0' # écoute sur toutes les IP

Étape 3: une fois que vous avez fermé le gedit, au cas où votre port serait bloqué

sudo ufw allow 8888 # activez votre port tcp: 8888, qui est votre port jupyter par défaut

Étape 4: définir un mot de passe

jupyter notebook password # il demandera le mot de passe

Étape 5: Démarrez Jupyter

jupyter notebook

et connectez-vous comme http://xxx.xxx.xxx.xxx:8888/login ?

Koushik Paul
la source
Encore une chose. Si vous rencontrez toujours des problèmes, avant le c.NotebookApp.allow_origin, ajoutez c=get_config(). Aussi lors de l'ouverture du lien dans votre ordinateur personnel, au lieu d'utiliser l' httpsutilisation http. donc il ouvrira quelque chose comme http://external_ip_from_GCP_console:8888. l'utilisation httpest importante, c'est un petit détail et facile à chevaucher. Merci @Koushik pour avoir compilé la réponse. J'ai voté pour votre réponse parce que cela a fonctionné pour moi.
StatguyUser
19

Dans RedHat 7, nous devons autoriser le port spécifique avant d'exécuter la commande Jupiter. Disons que le port est 8080.

iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT

Ensuite, nous pouvons l'exécuter normalement. Par exemple, en utilisant:

jupyter notebook --ip 0.0.0.0 --no-browser --port=8080 --allow-root

ou ce que vous aimez.

Vikas Gupta
la source
merci, mon système est Centos 7 mais jupyter a des problèmes à servir. J'ai d'abord désactivé le pare-feu mais je ne peux toujours pas servir, mais en particulier en appliquant la deuxième ligne ===> jupyter notebook --ip 0.0.0.0 --no-browser --port = 8080 --allow-root résoudre le problème. ça fonctionne maintenant.
RedArrow
exécuter un cahier avec spécifié ipet portest parfait
Wenmin Wu
Cela a également résolu les problèmes d'accès avec jupyterhub, pour moi. Le port standard utilisé par jupyterhub ne permet pas les connexions en dehors de 127.0.0.1
Eduardo Pignatelli
Fonctionne également pour les instances ec2. C'est un peu déroutant car le groupe de sécurité a ce port autorisé mais le serveur n'est pas disponible tant que vous n'avez pas exécuté avec ces paramètres.
Vadim le
8

Sinon, vous pouvez simplement créer un tunnel vers le serveur:

ssh -i <your_key> <user@server-instance> -L 8888:127.0.0.1:8888

Ensuite, ouvrez simplement 127.0.0.1:8888votre navigateur.

Vous omettez également -i <your_key>si vous n'avez pas de fichier_identité.

Jordan
la source
Dans le cas où l'on utilise des ports différents 8888:127.0.0.1:8888, le premier 8888est le port de la machine locale, le dernier est le port de la machine distante.
Yuen Tau
ssh your_username@host_ip_address -L your_port:127.0.0.1:remote_portfonctionne dans mon cas. Merci.
Catbuilts
7

Depuis votre ligne de commande, nous pouvons voir que votre serveur jupyter fonctionne normalement.La raison pour laquelle vous ne pouvez pas accéder à votre serveur jupyter distant est que les règles de pare-feu de votre serveur centos6.5 distant bloquent la requête entrante de votre navigateur local, c'est-à-dire bloquent votre tcp: 8045 port.
sudo ufw allow 80 # enable http server
sudo ufw allow 443 # enable https server
sudo ufw allow 8045 # enable your tcp:8045 port
puis essayez à nouveau d'accéder à votre jupyter.


Peut-être que vous devez également décommenter et modifier cet endroit dans votre jupyter_notebook_config.pyfichier:

c.NotebookApp.allow_remote_access = True

et même éteignez votre VPN si vous en avez un.

Hu Xixi
la source
4

L'autre raison peut être un pare-feu. Nous avons eu le même problème même avec

notebook jupyter --ip xx.xx.xx.xxx --port xxxx.

Ensuite, il s'avère être un pare-feu sur notre nouveau centOS7.

Dhanas chenniappan
la source
1

J'utilise Anaconda3 sur Windows 10. Lorsque vous l'installez, rembember pour marquer "ajouter aux variables d'environnement".


Prérequis: un fichier de configuration du notebook

Vérifiez si vous disposez d' un fichier de configuration de l' ordinateur, jupyter_notebook_config.py. L'emplacement par défaut de ce fichier est votre dossier Jupyter situé dans votre répertoire de base:

  • Les fenêtres: C:\\Users\\USERNAME\\.jupyter\\jupyter_notebook_config.py
  • OS X: /Users/USERNAME/.jupyter/jupyter_notebook_config.py
  • Linux: /home/USERNAME/.jupyter/jupyter_notebook_config.py

Si vous n'avez pas encore de dossier Jupyter ou si votre dossier Jupyter ne contient pas de fichier de configuration de notebook, exécutez la commande suivante:

$ jupyter notebook --generate-config

Cette commande créera le dossier Jupyter si nécessaire, et créera le fichier de configuration du notebook,, jupyter_notebook_config.pydans ce dossier.


Par défaut, Jupyter Notebook n'accepte que les connexions de l'hôte local.

Modifiez le jupyter_notebook_config.pyfichier comme suit pour accepter toutes les connexions entrantes:

c.NotebookApp.allow_origin = '*' #allow all origins

Vous devrez également modifier les adresses IP sur lesquelles le notebook écoutera:

c.NotebookApp.ip = '0.0.0.0' # listen on all IPs

madx
la source
0

si vous utilisez l'environnement Conda, vous devez configurer à nouveau le fichier de configuration. Et l'emplacement du fichier sera quelque chose comme ça. Je n'ai pas configuré de fichier de configuration après avoir créé env dans Conda et c'était mon problème de connexion.

C:\Users\syurt\AppData\Local\Continuum\anaconda3\envs\myenv\share\jupyter\jupyter_notebook_config.py
scyrt
la source
0

Si vous rencontrez toujours des problèmes et que vous exécutez quelque chose comme une instance EC2 AWS, il peut s'agir simplement d'ouvrir le port via la console AWS.

voir cette réponse

Oscillation isopycnale
la source
0

J'ai eu le même problème mais aucune des solutions de contournement ci-dessus ne fonctionne pour moi. Mais si je configure un notebook jupyter version docker, avec la même configuration, cela fonctionne pour moi.

Pour ma situation, il pourrait s'agir de problèmes de règle iptables. Parfois, vous pouvez simplement utiliser ufwpour autoriser tous les itinéraires vers votre serveur. Mais le mien juste iptables -Fpour effacer toute règle. Puis vérifieriptables -L -n si cela fonctionne.

Problème résolu.

James
la source
0

éditez ce qui suit sur le fichier jupyter_notebook_config
entrez l'adresse IP réelle de l'ordinateur
c.NotebookApp.ip = '192.168.xx'
c.NotebookApp.allow_origin = '*'

côté client, lancez jupyter notebook avec le mot de passe de connexion mot de passe
jupyter notebook

après avoir défini la connexion par mot de passe sur le navigateur, puis tapez l'adresse IP du serveur distant suivie du port. exemple 192.168.1.56:8889

chris mahn
la source
0

Essayez de faire l'étape ci-dessous:

La commande suivante corrige la lecture / écriture

    sudo chmod -R a+rw /home/ubuntu/certs/mycert.pem
Pranjal Verma
la source
-1

Est-ce votre adresse IP privée? Si tel est le cas, vous devrez utiliser votre version publique. Allez sur ipchicken pour découvrir de quoi il s'agit. Je sais que vous êtes dans le même LAN, mais essayez ceci pour voir si cela résout des problèmes.

Lucas Buhl-Nielsen
la source
-2

Quiconque est toujours bloqué - suivez les instructions sur cette page .

Fondamentalement:

  1. Suivez les étapes décrites initialement par AWS.

    1. Ouvrez SSH comme d'habitude.
    2. source activate python3
    3. Cahier Jupyter
  2. Ne coupez et ne collez rien. Ouvrez plutôt une nouvelle fenêtre de terminal sans fermer la première.

  3. Dans la nouvelle fenêtre, entrez la commande SSH comme décrit dans le lien ci-dessus.

  4. Ouvrez un navigateur Web et accédez à http://127.0.0.1:8157

Sasha Ramirez-Hughes
la source