Dlaczego nie mogę uzyskać dostępu do zdalnego serwera Jupyter Notebook?


90

Uruchomiłem serwer Jupyter Notebook na moim serwerze centos6.5 i jupyter działa jak

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

Kiedy chcę uzyskać zdalny dostęp do Jupyter w tej samej sieci lokalnej, powiedzmy otwórz http://192.168.1.111:8045/, w ogóle nie mogę otworzyć strony Jupyter. Nawiasem mówiąc, mogę pomyślnie uzyskać dostęp do zdalnego serwera centos.

Jaki jest możliwy powód?

Odpowiedzi:


143

Czy skonfigurowałeś plik jupyter_notebook_config.py tak , aby zezwalał na połączenia zewnętrzne?

Domyślnie Jupyter Notebook akceptuje tylko połączenia z hosta lokalnego (np. Z tego samego komputera, na którym działa). Modyfikując opcję NotebookApp.allow_origin z domyślnego „” na „*”, zezwalasz na dostęp do Jupyter z zewnątrz.

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

Będziesz także musiał zmienić adresy IP, na których będzie nasłuchiwał notebook:

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


Zobacz także szczegóły w kolejnej odpowiedzi w tym wątku.

Dokumentacja dotycząca pliku konfiguracyjnego Jupyter Notebook.


9
Używając jupyter z jupyter notebook --ip 0.0.0.0, możesz zdecydować się na środowisko uruchomieniowe z tym samym wynikiem, ale bez potrzeby korzystania z pliku konfiguracyjnego.
janniks

Masz inny dodatkowy pomysł? Spróbowałem dosłownie każdej dostępnej odpowiedzi na to pytanie i żadna z nich nie zadziałała. Ustawiłem konfiguracje, zezwoliłem na dostęp z zewnątrz, zezwoliłem na wszystkie adresy IP i źródła ... wciąż odmawia połączenia. Nie rozumiem, dlaczego to musi być takie trudne. Używanie systemu Windows naprawdę mnie denerwuje.
Lucas Lima

72

Udało mi się uzyskać dostęp do mojego lokalnego serwera przez ip za pomocą polecenia pokazanego poniżej:

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

zamień na xx.xx.xx.xxlokalny adres IP serwera jupyter.


26
Użyłemjupyter notebook --ip 0.0.0.0 --port 8888
Talha Junaid

1
0.0.0.0umożliwi dostęp do notebooka na wszystkich interfejsach sieciowych, a nie tylko na serwerze lokalnym. Jeśli uruchamiasz go i uzyskujesz do niego dostęp na tej samej maszynie lub masz przed sobą serwer, taki jak nginx, powinieneś ograniczyć go 127.0.0.1tylko do
theferrit32

Ponadto, jeśli korzystasz z instancji chmury, takiej jak EC2, upewnij się, że edytujesz grupę bezpieczeństwa, aby zezwolić na ruch przychodzący na porcie 8888.
Mad Scientist

34

James023 podał już poprawną odpowiedź. Po prostu formatuję

jeśli nie skonfigurowałeś już pliku jupyter_notebook_config.py

Krok 1: wygeneruj plik, wpisując ten wiersz w konsoli

jupyter notebook --generate-config

Krok 2: edytuj wartości

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

(dodaj w dowolnym miejscu następujące dwie linie, ponieważ wartości domyślne są i tak komentowane)

c.NotebookApp.allow_origin = '*' # Zezwalaj na wszystkie źródła

c.NotebookApp.ip = '0.0.0.0' # nasłuchuj na wszystkich adresach IP

Krok 3: po zamknięciu gedit, na wypadek gdyby twój port został zablokowany

sudo ufw allow 8888 # włącz port tcp: 8888, który jest domyślnym portem jupyter

Krok 4: ustaw hasło

jupyter notebook password # zapyta o hasło

Krok 5 : Uruchom jupyter

jupyter notebook

i połączyć się jak http://xxx.xxx.xxx.xxx:8888/login ?


Jeszcze jedna rzecz. Jeśli nadal masz problemy, przed c.NotebookApp.allow_origindodaniem c=get_config(). Również podczas otwierania linku na komputerze osobistym, zamiast httpsużywać go http. więc otworzy się coś takiego http://external_ip_from_GCP_console:8888. użycie httpjest ważne, jest to mały szczegół i łatwy do nadpisania. Dzięki @Koushik za skompilowanie odpowiedzi. Głosowałem za twoją odpowiedzią, ponieważ zadziałała dla mnie.
StatguyUser

19

W RedHat 7 musimy zezwolić na określony port przed uruchomieniem polecenia Jupiter. Powiedz, że port jest 8080.

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

Wtedy możemy to normalnie uruchomić. Na przykład, używając:

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

lub cokolwiek chcesz.


dzięki, mój system to Centos 7, ale jupyter ma problemy z obsługą. najpierw wyłączyłem zaporę, ale nadal nie mogę obsługiwać, ale szczególnie w przypadku zastosowania drugiej linii ===> jupyter notebook --ip 0.0.0.0 --no-browser --port = 8080 --allow-root rozwiąż problem. Teraz działa.
RedArrow

uruchom notatnik z określonym ipi portjest doskonały
Wenmin Wu

Rozwiązało to również dla mnie problemy z dostępem do jupyterhub. Standardowy port używany przez jupyterhub nie pozwala na połączenia poza 127.0.0.1
Eduardo Pignatelli

Działa również dla instancji ec2. Jest to trochę mylące, ponieważ grupa zabezpieczeń ma dozwolony ten port, ale serwer nie jest dostępny, dopóki nie uruchomisz z tymi parametrami.
Vadim

8

Alternatywnie możesz po prostu utworzyć tunel do serwera:

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

Następnie po prostu otwórz 127.0.0.1:8888w przeglądarce.

Pomijasz również, -i <your_key>jeśli nie masz pliku_tożsamości.


W przypadku korzystania z różnych portów, 8888:127.0.0.1:8888pierwszym 8888jest port na komputerze lokalnym, a drugim jest port na komputerze zdalnym.
Yuen Tau

ssh your_username@host_ip_address -L your_port:127.0.0.1:remote_portdziała w moim przypadku. Dzięki.
Catbuilts

7

Z linii poleceń widzimy, że Twój serwer jupyter działa normalnie. Powodem, dla którego nie możesz uzyskać dostępu do zdalnego serwera Jupyter, jest to, że reguły zapory sieciowej Twojego zdalnego serwera centos6.5 blokują przychodzące żądania z Twojej lokalnej przeglądarki, tj. Blokują Twój tcp: Port 8045.
sudo ufw allow 80 # enable http server
sudo ufw allow 443 # enable https server
sudo ufw allow 8045 # enable your tcp:8045 port
następnie spróbuj ponownie uzyskać dostęp do jupytera.


Może musisz również odkomentować i edytować to miejsce w jupyter_notebook_config.pypliku:

c.NotebookApp.allow_remote_access = True

a nawet wyłącz VPN, jeśli go masz.


4

Innym powodem może być firewall. Mieliśmy ten sam problem nawet z

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

Wtedy okazuje się, że jest to zapora ogniowa w naszym nowym centOS7.


1

Używam Anaconda3 w systemie Windows 10. Podczas instalacji pamiętaj o zaznaczeniu opcji „dodaj do zmiennych środowiska”.


Wymaganie wstępne: plik konfiguracyjny notatnika

Sprawdź, czy masz plik konfiguracyjny notebook, jupyter_notebook_config.py. Domyślną lokalizacją tego pliku jest folder Jupyter znajdujący się w katalogu domowym:

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

Jeśli nie masz jeszcze folderu Jupyter lub jeśli folder Jupyter nie zawiera pliku konfiguracyjnego notatnika, uruchom następujące polecenie:

$ jupyter notebook --generate-config

To polecenie utworzy w razie potrzeby folder Jupyter i utworzy plik konfiguracyjny notatnika jupyter_notebook_config.pyw tym folderze.


Domyślnie Jupyter Notebook akceptuje tylko połączenia z hosta lokalnego.

Edytuj jupyter_notebook_config.pyplik w następujący sposób, aby zaakceptować wszystkie połączenia przychodzące:

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

Będziesz także musiał zmienić adresy IP, na których będzie nasłuchiwał notebook:

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


0

jeśli używasz środowiska Conda, powinieneś ponownie ustawić plik konfiguracyjny. Lokalizacja pliku będzie podobna do tego. Nie skonfigurowałem pliku konfiguracyjnego po utworzeniu env w Conda i to był mój problem z połączeniem.

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


0

Mam ten sam problem, ale żadne z powyższych obejść nie działa dla mnie. Ale jeśli skonfiguruję notebooka jupyter w wersji docker, z tą samą konfiguracją, to działa.

Z mojego punktu widzenia mogą to być problemy z regułami iptables. Czasami możesz po prostu użyć, ufwaby zezwolić na wszystkie trasy do twojego serwera. Ale mój tylko iptables -Fpo to, by usunąć wszystkie reguły. Następnie sprawdź, iptables -L -nczy działa.

Problem rozwiązany.


0

edytuj w pliku jupyter_notebook_config
rzeczywisty adres IP komputera
c.NotebookApp.ip = '192.168.xx'
c.NotebookApp.allow_origin = '*'

po stronie klienta uruchom notebook jupyter z hasłem logowania hasło
notebooka jupyter

po ustawieniu hasła zaloguj się w przeglądarce, a następnie wpisz adres IP zdalnego serwera i port. przykład 192.168.1.56:8889


0

Spróbuj wykonać poniższy krok:

Następujące polecenie naprawia odczyt / zapis

    sudo chmod -R a+rw /home/ubuntu/certs/mycert.pem

-1

Czy to twój prywatny adres IP? Jeśli tak, musisz użyć swojego publicznego. Idź do ipchicken, aby dowiedzieć się, co to jest. Wiem, że jesteś w tej samej sieci LAN, ale spróbuj tego, aby zobaczyć, czy to rozwiązuje jakiekolwiek problemy.


-2

Każdy, kto nadal utknął - postępuj zgodnie z instrukcjami na tej stronie .

Gruntownie:

  1. Postępuj zgodnie z instrukcjami początkowo opisanymi przez AWS.

    1. Otwórz SSH jak zwykle.
    2. source activate python3
    3. Notatnik Jupyter
  2. Nie wycinaj i nie wklejaj niczego. Zamiast tego otwórz nowe okno terminala bez zamykania pierwszego.

  3. W nowym oknie wprowadź komendę SSH zgodnie z opisem w powyższym linku.

  4. Otwórz przeglądarkę internetową i przejdź do http://127.0.0.1:8157

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.