Por que não consigo acessar o servidor Jupyter Notebook remoto?

94

Eu iniciei um servidor Jupyter Notebook no meu servidor centos6.5. E o jupyter está funcionando como

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

Quando eu quero acessar o Jupyter remotamente na mesma rede local, digamos aberta http://192.168.1.111:8045/, não consigo abrir uma página Jupyter. A propósito, posso acessar o servidor centos remoto com sucesso.

Qual é a possível razão?

Peng He
fonte

Respostas:

151

Você configurou o arquivo jupyter_notebook_config.py para permitir conexões externas?

Por padrão, o Jupyter Notebook só aceita conexões do host local (por exemplo, do mesmo computador em que está sendo executado). Ao modificar a opção NotebookApp.allow_origin do padrão '' para '*', você permite que o Jupyter seja acessado externamente.

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

Você também precisará alterar os IPs que o notebook ouvirá:

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


Veja também os detalhes em uma resposta subsequente neste tópico.

Documentação no arquivo de configuração do Jupyter Notebook.

James023
fonte
10
Usando o jupyter com jupyter notebook --ip 0.0.0.0você pode decidir sobre o tempo de execução com o mesmo resultado, mas sem a necessidade de um arquivo de configuração.
janniks
Alguma outra ideia adicional? Eu tentei literalmente todas as respostas disponíveis para esta pergunta, e nenhuma delas funcionou para mim. Eu configurei as configurações, permiti acessos externos, permiti todos os IPs e origens ... ainda conseguindo uma conexão recusada. Não entendo por que tem que ser tão difícil. Usar o Windows realmente me irrita.
Lucas Lima
73

Consegui acessar meu servidor local por ip usando o comando mostrado abaixo:

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

substitua o xx.xx.xx.xxpelo seu ip local do servidor jupyter.

Teo Kok Keong
fonte
27
Eu useijupyter notebook --ip 0.0.0.0 --port 8888
Talha Junaid
1
0.0.0.0permitirá o acesso ao notebook em todas as interfaces de rede, não apenas localhost. Se você estiver executando e acessando na mesma máquina, ou estiver executando um servidor como o nginx na frente dele, você deve limitá-lo a 127.0.0.1apenas
theferrit32
Além disso, se você estiver executando em uma instância de nuvem como EC2, certifique-se de editar seu grupo de segurança para permitir o tráfego de entrada na porta 8888.
Mad Scientist
@Teo Kok Keong: Onde você insere o comando? No prompt do Shell?
MSIS
37

James023 já declarou a resposta correta. Apenas formatando

se você ainda não configurou o arquivo jupyter_notebook_config.py

Passo 1: gere o arquivo digitando esta linha no console

jupyter notebook --generate-config

Passo 2: edite os valores

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

(adicione as duas linhas a seguir em qualquer lugar porque os valores padrão são comentados de qualquer maneira)

c.NotebookApp.allow_origin = '*' #allow todas as origens

c.NotebookApp.ip = '0.0.0.0' # escuta em todos os IPs

Passo 3: depois de fechar o gedit, caso sua porta esteja bloqueada

sudo ufw allow 8888 # habilite sua porta tcp: 8888, que é sua porta jupyter padrão

Passo 4: defina uma senha

jupyter notebook password # solicitará a senha

Passo 5: inicie o jupyter

jupyter notebook

e conecte-se como http://xxx.xxx.xxx.xxx:8888/login ?

Koushik Paul
fonte
Mais uma coisa. Se você ainda estiver enfrentando problemas, antes de c.NotebookApp.allow_originadicionar c=get_config(). Também ao abrir o link em seu computador pessoal, em vez de httpsusar http. então abrirá algo como http://external_ip_from_GCP_console:8888. o uso httpé importante, é um pequeno detalhe e fácil de sobrepor. Obrigado @Koushik por compilar a resposta. Votei positivamente em sua resposta porque funcionou para mim.
StatguyUser de
onde a senha está armazenada? Não consigo encontrar jupyter_notebook_config.pydepois de definir a senha na etapa 4
liang
19

No RedHat 7, precisamos permitir a porta específica antes de executar o comando Jupiter. Digamos que o porto seja 8080.

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

Então podemos executá-lo normalmente. Por exemplo, usando:

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

ou o que você quiser.

Vikas Gupta
fonte
obrigado, meu sistema é Centos 7 mas jupyter tem problemas para servir. primeiro desativei o firewall, mas ainda não consigo servir, mas principalmente aplicando a segunda linha ===> jupyter notebook --ip 0.0.0.0 --no-browser --port = 8080 --allow-root resolve o problema. agora está funcionando.
RedArrow
executar notebook com especificado ipe porté perfeito
Wenmin Wu
Isso resolveu problemas de acesso com o jupyterhub também, para mim. A porta padrão que o jupyterhub usa não permite conexões fora de 127.0.0.1
Eduardo Pignatelli
Funciona para instâncias ec2 também. É um pouco confuso porque o grupo de segurança tem aquela porta permitida, mas o servidor não está disponível até que você execute esses parâmetros.
Vadim
10

Na linha de comando, podemos ver que seu servidor jupyter está funcionando normalmente. O motivo pelo qual você não pode acessar seu servidor jupyter remoto é que as regras de firewall do servidor centos6.5 remoto bloqueiam a solicitação de entrada de seu navegador local, ou seja, bloqueie seu tcp: Porta 8045.
sudo ufw allow 80 # enable http server
sudo ufw allow 443 # enable https server
sudo ufw allow 8045 # enable your tcp:8045 port
em seguida, tente acessar seu jupyter novamente.


Talvez você também precise remover o comentário e editar esse local em seu jupyter_notebook_config.pyarquivo:

c.NotebookApp.allow_remote_access = True

e até desligue sua VPN, se você tiver uma.

Hu Xixi
fonte
8

Como alternativa, você pode apenas criar um túnel para o servidor:

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

Depois é só abrir 127.0.0.1:8888no seu navegador.

Você também omite o -i <your_key>caso não tenha um arquivo de identidade.

Jordânia
fonte
No caso de usar portas diferentes 8888:127.0.0.1:8888, a primeira 8888é a porta da máquina local, a última é a porta da máquina remota.
Yuen Tau,
4

O outro motivo pode ser um firewall. Tivemos o mesmo problema mesmo com

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

Em seguida, é um firewall em nosso novo centOS7.

Dhanas Chenniappan
fonte
2

Estou usando o Anaconda3 no Windows 10. Ao instalá-lo, lembre-se de marcar "adicionar às variáveis ​​de ambiente".


Pré-requisito: Um arquivo de configuração de notebook

Verifique se você tem um arquivo de configuração do notebook jupyter_notebook_config.py,. O local padrão para este arquivo é sua pasta Jupyter localizada em seu diretório inicial:

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

Se você ainda não tem uma pasta Jupyter ou se sua pasta Jupyter não contém um arquivo de configuração de notebook, execute o seguinte comando:

$ jupyter notebook --generate-config

Este comando criará a pasta Jupyter, se necessário, e criará o arquivo de configuração do notebook,, jupyter_notebook_config.pynesta pasta.


Por padrão, o Jupyter Notebook só aceita conexões de localhost.

Edite o jupyter_notebook_config.pyarquivo da seguinte forma para aceitar todas as conexões de entrada:

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

Você também precisará alterar os IPs que o notebook ouvirá:

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

madx
fonte
0

se você estiver usando o ambiente Conda, deve configurar o arquivo de configuração novamente. E a localização do arquivo será algo assim. Não instalei o arquivo de configuração depois de criar env no Conda e esse era o meu problema de conexão.

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

Se você ainda estiver tendo problemas e estiver executando algo como a instância EC2 AWS, pode ser apenas o caso de abrir a porta por meio do console AWS.

veja esta resposta

Oscilação Isopicnal
fonte
0

Eu tive o mesmo problema, mas nenhuma das soluções alternativas acima funcionam para mim. Mas se eu configurar um notebook jupyter versão docker, com a mesma configuração, funciona para mim.

Para minha situação, podem ser problemas de regra de iptables. Às vezes, você pode apenas usar ufwpara permitir todas as rotas para o seu servidor. Mas meu apenas iptables -Fpara limpar todas as regras. Em seguida, verifique iptables -L -nse funciona.

Problema resolvido.

James
fonte
0

edite o seguinte no arquivo jupyter_notebook_config
insira o endereço IP real do computador
c.NotebookApp.ip = '192.168.xx'
c.NotebookApp.allow_origin = '*'

no lado do cliente, inicie o jupyter notebook com senha de login senha do
jupyter notebook

depois de definir a senha, faça login no navegador e digite o endereço IP do servidor remoto seguido da porta. exemplo 192.168.1.56:8889

chris mahn
fonte
0

Tente seguir a etapa abaixo:

O comando a seguir corrige a leitura / gravação

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

Eu enfrentei um problema semelhante e resolvi isso depois de fazer o seguinte:

  1. verifique seu arquivo de configuração do jupyter: isso é descrito aqui em detalhes; https://testnb.readthedocs.io/en/stable/examples/Notebook/Configuring%20the%20Notebook%20and%20Server.html

- você simplesmente precisará acessar o link acima para aprender como fazer o servidor jupyter ouvir seu IP de máquina local - você precisará saber seu IP de máquina local (eu uso "ifconfig -a" no ubuntu para descobrir) - por favor, verifique se há centos6

depois de terminar de definir sua configuração, você pode executar o jupyter notebook em seu IP local: jupyter notebook --ip = * --no-browser

substitua * pelo seu endereço IP, por exemplo: jupyter notebook --ip = 192.168.xx --no-browser

agora você pode acessar seu servidor jupyter de qualquer dispositivo conectado ao roteador usando este ip: port (a porta geralmente é 8888, então no meu caso, por exemplo, usei "192.168.xx: 8888" para acessar meu servidor de outros dispositivos)

agora se você deseja acessar este servidor a partir de um IP público, você terá que:

  1. encontre seu IP público (basta digitar no google qual é o meu IP)
  2. use este endereço IP em vez do seu IP local para acessar o servidor de qualquer dispositivo não conectado ao mesmo roteador. Por favor, observe: se o seu servidor Linux roda em uma máquina virtual, você precisará configurar o seu roteador para permitir o acesso ao seu VB a partir de IPs públicos, as configurações dependem do tipo de roteador. caso contrário, você deve conseguir acessar o servidor usando o IP público e a porta configurada para ele de qualquer dispositivo não conectado ao seu roteador, ou usando seu IP local e a porta configurada de qualquer dispositivo conectado ao mesmo roteador!
Waly
fonte
-1

Esse é o seu endereço IP privado? Nesse caso, você precisará usar o seu público. Vá para ipchicken para descobrir o que é. Sei que você está na mesma LAN, mas tente fazer isso para ver se isso resolve algum problema.

Lucas Buhl-Nielsen
fonte
-2

Qualquer pessoa que ainda esteja presa - siga as instruções nesta página .

Basicamente:

  1. Siga as etapas descritas inicialmente pela AWS.

    1. Abra o SSH normalmente.
    2. source activate python3
    3. Notebook Jupyter
  2. Não corte e cole nada. Em vez disso, abra uma nova janela de terminal sem fechar a primeira.

  3. Na nova janela, digite o comando SSH conforme descrito no link acima.

  4. Abra um navegador da web e vá para http://127.0.0.1:8157

Sasha Ramirez-Hughes
fonte