Warum kann ich nicht auf den Remote-Jupyter-Notebook-Server zugreifen?

90

Ich habe einen Jupyter Notebook-Server auf meinem centos6.5-Server gestartet. Und jupyter läuft wie

[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).

Wenn ich im selben lokalen Netzwerk remote auf Jupyter zugreifen möchte, z. B. Öffnen http://192.168.1.111:8045/, kann ich eine Jupyter-Seite überhaupt nicht öffnen. Übrigens kann ich erfolgreich auf Remote-Centos-Server zugreifen.

Was ist der mögliche Grund?

Peng He
quelle

Antworten:

143

Haben Sie die Datei jupyter_notebook_config.py so konfiguriert , dass externe Verbindungen zulässig sind ?

Standardmäßig akzeptiert Jupyter Notebook nur Verbindungen von localhost (z. B. von demselben Computer, auf dem es ausgeführt wird). Durch Ändern der Option " NotebookApp.allow_origin " von "'" auf "*" können Sie extern auf Jupyter zugreifen.

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

Sie müssen auch die IP-Adressen ändern, die das Notebook abhört:

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


Siehe auch die Details in einer nachfolgenden Antwort in diesem Thread.

Dokumentation zur Konfigurationsdatei des Jupyter Notebook.

James023
quelle
9
Wenn Sie jupyter mit verwenden jupyter notebook --ip 0.0.0.0, können Sie die Laufzeit mit demselben Ergebnis festlegen , ohne dass eine Konfigurationsdatei erforderlich ist.
Janniks
Irgendeine zusätzliche Idee? Ich habe buchstäblich jede Antwort auf diese Frage ausprobiert, und keine davon hat für mich funktioniert. Ich habe die Konfigurationen festgelegt, externe Zugriffe zugelassen, alle IPs und Ursprünge zugelassen ... immer noch eine Verbindung abgelehnt. Ich verstehe nicht, warum es so schwer sein muss. Die Verwendung von Windows nervt mich wirklich.
Lucas Lima
72

Ich habe es geschafft, den Zugriff auf meinen lokalen Server per IP mit dem folgenden Befehl zu erhalten:

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

Ersetzen Sie die xx.xx.xx.xxdurch Ihre lokale IP des Jupyter-Servers.

Teo Kok Keong
quelle
26
Ich benutztejupyter notebook --ip 0.0.0.0 --port 8888
Talha Junaid
1
0.0.0.0ermöglicht den Zugriff auf das Notebook über alle Netzwerkschnittstellen, nicht nur über localhost. Wenn Sie es ausführen und auf demselben Computer darauf zugreifen oder einen Server wie nginx davor 127.0.0.1
ausführen
Auch wenn Sie auf einer Cloud-Instanz wie EC2 ausgeführt werden, müssen Sie Ihre Sicherheitsgruppe so bearbeiten, dass eingehender Datenverkehr auf Port 8888 zugelassen wird.
Mad Scientist
34

James023 hat bereits die richtige Antwort gegeben. Einfach formatieren

Wenn Sie die Datei jupyter_notebook_config.py noch nicht konfiguriert haben

Schritt 1: Generieren Sie die Datei, indem Sie diese Zeile in die Konsole eingeben

jupyter notebook --generate-config

Schritt 2: Bearbeiten Sie die Werte

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

(Fügen Sie die folgenden zwei Zeilen an einer beliebigen Stelle hinzu, da die Standardwerte ohnehin kommentiert werden.)

c.NotebookApp.allow_origin = '*' # alle Ursprünge zulassen

c.NotebookApp.ip = '0.0.0.0' # Alle IPs abhören

Schritt 3: Sobald Sie den gedit geschlossen haben, falls Ihr Port blockiert ist

sudo ufw allow 8888 # Aktivieren Sie Ihren TCP: 8888-Port, der Ihr Standard-Jupyter-Port ist

Schritt 4: Legen Sie ein Passwort fest

jupyter notebook password # Es wird zur Eingabe des Passworts aufgefordert

Schritt 5: Jupyter starten

jupyter notebook

und verbinden wie http://xxx.xxx.xxx.xxx:8888/login ?

Koushik Paul
quelle
Eine Sache noch. Wenn Sie immer noch Probleme haben c.NotebookApp.allow_origin, fügen Sie vor dem hinzu c=get_config(). Auch beim Öffnen des Links in Ihrem PC, anstatt die Verwendung zu httpsverwenden http. so wird es so etwas öffnen http://external_ip_from_GCP_console:8888. Die Verwendung httpist wichtig, es ist ein kleines Detail und leicht zu überlappen. Vielen Dank an @Koushik für die Zusammenstellung der Antwort. Ich habe Ihre Antwort positiv bewertet, weil sie für mich funktioniert hat.
StatguyUser
19

In RedHat 7 müssen wir den spezifischen Port zulassen, bevor wir den Jupiter-Befehl ausführen. Angenommen, der Hafen ist 8080.

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

Dann können wir es normal ausführen. Zum Beispiel mit:

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

oder was auch immer du magst.

Vikas Gupta
quelle
danke, mein system ist Centos 7, aber jupyter hat probleme zu bedienen. Zuerst habe ich die Firewall deaktiviert, kann sie aber immer noch nicht bedienen, aber insbesondere bei der Anwendung der zweiten Zeile ===> Jupyter Notebook --ip 0.0.0.0 --no-browser --port = 8080 --allow-root löst das Problem. es funktioniert jetzt.
RedArrow
Führen Sie Notebook mit angegebenen ipund portist perfekt
Wenmin Wu
Dies löste für mich auch Zugriffsprobleme mit jupyterhub. Der Standardport, den jupyterhub verwendet, erlaubt keine Verbindungen außerhalb von 127.0.0.1
Eduardo Pignatelli
Funktioniert auch für ec2-Instanzen. Es ist etwas verwirrend, da die Sicherheitsgruppe diesen Port zugelassen hat, der Server jedoch erst verfügbar ist, wenn Sie mit diesen Parametern ausgeführt werden.
Vadim
8

Alternativ können Sie einfach einen Tunnel zum Server erstellen:

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

Dann öffnen 127.0.0.1:8888Sie einfach in Ihrem Browser.

Sie lassen das auch weg, -i <your_key>wenn Sie keine Identitätsdatei haben.

Jordanien
quelle
Wenn unterschiedliche Ports verwendet werden, 8888:127.0.0.1:8888ist der erste 8888der Port auf dem lokalen Computer und der spätere der Port auf dem Remotecomputer.
Yuen Tau
ssh your_username@host_ip_address -L your_port:127.0.0.1:remote_portfunktioniert in meinem Fall. Vielen Dank.
Catbuilts
7

Über Ihre Befehlszeile können wir sehen, dass Ihr Jupyter-Server normal ausgeführt wird. Der Grund, warum Sie nicht auf Ihren Remote-Jupyter-Server zugreifen können, besteht darin, dass die Firewall-Regeln Ihres Remote-Centos6.5-Servers die eingehende Anforderung Ihres lokalen Browsers blockieren, dh Ihr TCP blockieren: 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
Versuchen Sie dann erneut, auf Ihren Jupyter zuzugreifen.


Vielleicht müssen Sie diesen Ort in Ihrem auch auskommentieren und bearbeiten jupyter_notebook_config.py Datei :

c.NotebookApp.allow_remote_access = True

und sogar Ihr VPN herunterfahren, wenn Sie eines haben.

Hu Xixi
quelle
4

Der andere Grund kann eine Firewall sein. Wir hatten sogar das gleiche Problem mit

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

Dann stellt sich heraus, dass es sich bei unserem neuen centOS7 um eine Firewall handelt.

Dhanas Chennaiiappan
quelle
1

Ich verwende Anaconda3 unter Windows 10. Wenn Sie es installieren, markieren Sie "Zu Umgebungsvariablen hinzufügen".


Voraussetzung: Eine Notebook-Konfigurationsdatei

Überprüfen Sie, ob Sie eine Notebook-Konfigurationsdatei haben jupyter_notebook_config.py. Der Standardspeicherort für diese Datei ist Ihr Jupyter-Ordner in Ihrem Home-Verzeichnis:

  • Windows: 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

Wenn Sie noch keinen Jupyter-Ordner haben oder wenn Ihr Jupyter-Ordner keine Notebook-Konfigurationsdatei enthält, führen Sie den folgenden Befehl aus:

$ jupyter notebook --generate-config

Dieser Befehl erstellt bei Bedarf den Jupyter-Ordner und eine Notebook-Konfigurationsdatei jupyter_notebook_config.pyin diesem Ordner.


Standardmäßig akzeptiert Jupyter Notebook nur Verbindungen von localhost.

Bearbeiten Sie die jupyter_notebook_config.pyDatei wie folgt, um alle eingehenden Verbindungen zu akzeptieren:

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

Sie müssen auch die IP-Adressen ändern, die das Notebook abhört:

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

Madx
quelle
0

Wenn Sie eine Conda-Umgebung verwenden, sollten Sie die Konfigurationsdatei erneut einrichten. Und der Speicherort der Datei wird ungefähr so ​​sein. Ich habe keine Konfigurationsdatei eingerichtet, nachdem ich env in Conda erstellt habe, und das war mein Verbindungsproblem.

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

Wenn Sie immer noch Probleme haben und eine EC2-AWS-Instanz ausführen, müssen Sie möglicherweise nur den Port über die AWS-Konsole öffnen.

siehe diese Antwort

Isopycnale Schwingung
quelle
0

Ich habe das gleiche Problem, aber keine der oben genannten Problemumgehungen funktioniert für mich. Aber wenn ich ein Docker-Version-Jupiter-Notebook mit derselben Konfiguration einrichte, funktioniert es für mich.

Für meine Situation könnte es sich um Probleme mit iptables-Regeln handeln. Manchmal können Sie nur verwenden ufw, um alle Routen zu Ihrem Server zuzulassen. Aber meine, nur iptables -Fum alle Regeln zu klären. Dann überprüfeiptables -L -n , ob es funktioniert.

Problem gelöst.

James
quelle
0

Bearbeiten Sie Folgendes in der Datei jupyter_notebook_config. Geben Sie
die tatsächliche IP-Adresse
des Computers ein. c.NotebookApp.ip = '192.168.xx'
c.NotebookApp.allow_origin = '*'

auf der clientseitigen jupyter notebook mit login password
jupyter notebook password starten

Nachdem Sie das Kennwort festgelegt haben, melden Sie sich im Browser an und geben Sie die IP-Adresse des Remoteservers gefolgt vom Port ein. Beispiel 192.168.1.56:8889

Chris Mahn
quelle
0

Versuchen Sie es mit dem folgenden Schritt:

Der folgende Befehl behebt das Lesen / Schreiben

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

Ist das Ihre private IP-Adresse? In diesem Fall müssen Sie Ihre öffentliche verwenden. Gehen Sie zu ipchicken, um herauszufinden, was es ist. Ich weiß, dass Sie sich im selben LAN befinden, aber versuchen Sie dies, um festzustellen, ob Probleme behoben sind.

Lucas Buhl-Nielsen
quelle
-2

Wer noch feststeckt - folgen Sie den Anweisungen auf dieser Seite .

Grundsätzlich:

  1. Befolgen Sie die Schritte, die ursprünglich von AWS beschrieben wurden.

    1. Öffnen Sie SSH wie gewohnt.
    2. source activate python3
    3. Jupyter Notizbuch
  2. Schneiden Sie nichts aus und fügen Sie nichts ein. Öffnen Sie stattdessen ein neues Terminalfenster, ohne das erste zu schließen.

  3. Geben Sie im neuen Fenster den SSH-Befehl ein, wie im obigen Link beschrieben.

  4. Öffnen Sie einen Webbrowser und gehen Sie zu http://127.0.0.1:8157

Sasha Ramirez-Hughes
quelle