เหตุใดฉันจึงไม่สามารถเข้าถึงเซิร์ฟเวอร์ Jupyter Notebook ระยะไกลได้


94

ฉันได้เริ่มเซิร์ฟเวอร์ Jupyter Notebook บนเซิร์ฟเวอร์ centos6.5 ของฉันแล้วและ jupyter ก็ทำงานเหมือนเดิม

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

เมื่อฉันต้องการเข้าถึง Jupyter จากระยะไกลในเครือข่ายท้องถิ่นเดียวกันให้พูดว่าเปิดhttp://192.168.1.111:8045/ฉันไม่สามารถเปิดหน้า Jupyter ได้เลย ยังไงก็ตามฉันสามารถเข้าถึงเซิร์ฟเวอร์เซนโตสระยะไกลได้สำเร็จ

สาเหตุที่เป็นไปได้คืออะไร?

คำตอบ:


150

คุณได้กำหนดค่าไฟล์jupyter_notebook_config.pyเพื่ออนุญาตการเชื่อมต่อภายนอกหรือไม่

โดยค่าเริ่มต้น Jupyter Notebook จะยอมรับการเชื่อมต่อจาก localhost เท่านั้น (เช่นจากคอมพิวเตอร์เครื่องเดียวกับที่ทำงานอยู่) ด้วยการแก้ไขอ็อพชันNotebookApp.allow_originจากค่าเริ่มต้น '' เป็น '*' คุณอนุญาตให้เข้าถึง Jupyter จากภายนอกได้

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

คุณจะต้องเปลี่ยน IP ที่โน้ตบุ๊กจะรับฟัง:

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


ดูรายละเอียดในคำตอบที่ตามมาในชุดข้อความนี้ด้วย

เอกสารประกอบเกี่ยวกับไฟล์กำหนดค่า Jupyter Notebook


9
การใช้ jupyter กับjupyter notebook --ip 0.0.0.0คุณสามารถตัดสินใจเกี่ยวกับรันไทม์ด้วยผลลัพธ์เดียวกัน แต่ไม่จำเป็นต้องใช้ไฟล์คอนฟิกูเรชัน
janniks

ความคิดเพิ่มเติมอื่น ๆ ? ฉันพยายามทุกคำตอบที่มีอยู่สำหรับคำถามนี้อย่างแท้จริงและไม่มีคำตอบใดที่เหมาะกับฉัน ฉันได้ตั้งค่าคอนฟิกอนุญาตการเข้าถึงภายนอกอนุญาต IP และต้นกำเนิดทั้งหมด ... ยังคงได้รับการเชื่อมต่อถูกปฏิเสธ ฉันไม่เข้าใจว่าทำไมมันต้องยากขนาดนี้ การใช้ Windows ทำให้ฉันรำคาญจริงๆ
Lucas Lima

72

ฉันจัดการเพื่อเข้าถึงเซิร์ฟเวอร์ภายในของฉันด้วย ip โดยใช้คำสั่งที่แสดงด้านล่าง:

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

แทนที่xx.xx.xx.xxด้วย ip ภายในของคุณของเซิร์ฟเวอร์ jupyter


27
ฉันใช้jupyter notebook --ip 0.0.0.0 --port 8888
Talha Junaid

1
0.0.0.0จะเปิดใช้งานการเข้าถึงโน้ตบุ๊กบนอินเทอร์เฟซเครือข่ายทั้งหมดไม่ใช่เฉพาะ localhost หากคุณใช้งานและเข้าถึงบนเครื่องเดียวกันหรือคุณกำลังใช้งานเซิร์ฟเวอร์เช่น nginx อยู่ข้างหน้าคุณควร จำกัด ให้ใช้งานได้127.0.0.1เท่านั้น
theferrit32

นอกจากนี้หากคุณใช้งานบนอินสแตนซ์ระบบคลาวด์เช่น EC2 ตรวจสอบให้แน่ใจว่าคุณได้แก้ไขกลุ่มความปลอดภัยของคุณเพื่ออนุญาตการรับส่งข้อมูลขาเข้าบนพอร์ต 8888
Mad Scientist

@Teo Kok Keong: คุณป้อนคำสั่งที่ไหน? ในพรอมต์เชลล์?
MSIS

37

James023 ระบุคำตอบที่ถูกต้องแล้ว เพียงแค่จัดรูปแบบ

หากคุณยังไม่ได้กำหนดค่าไฟล์ jupyter_notebook_config.py ไว้แล้ว

ขั้นตอนที่ 1:สร้างไฟล์โดยพิมพ์บรรทัดนี้ในคอนโซล

jupyter notebook --generate-config

ขั้นตอนที่ 2:แก้ไขค่า

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

(เพิ่มสองบรรทัดต่อไปนี้ที่ใดก็ได้เนื่องจากค่าเริ่มต้นจะถูกแสดงความคิดเห็นอยู่ดี)

c.NotebookApp.allow_origin = '*' # อนุญาตต้นกำเนิดทั้งหมด

c.NotebookApp.ip = '0.0.0.0' # ฟังบน IP ทั้งหมด

ขั้นตอนที่ 3:เมื่อคุณปิด gedit แล้วในกรณีที่พอร์ตของคุณถูกบล็อก

sudo ufw allow 8888 # เปิดใช้งานพอร์ต tcp ของคุณ: 8888 ซึ่งเป็นพอร์ต jupyter เริ่มต้นของคุณ

ขั้นตอนที่ 4:ตั้งรหัสผ่าน

jupyter notebook password # มันจะแจ้งให้ใส่รหัสผ่าน

ขั้นตอนที่ 5:เริ่ม jupyter

jupyter notebook

และเชื่อมต่อเช่นhttp://xxx.xxx.xxx.xxx:8888/login ?


อีกหนึ่งสิ่ง. หากคุณยังคงประสบปัญหาก่อนที่จะเพิ่มc.NotebookApp.allow_origin c=get_config()นอกจากนี้ในขณะที่เปิดการเชื่อมโยงในเครื่องคอมพิวเตอร์ส่วนบุคคลของคุณแทนการใช้การใช้งานhttps จึงจะเปิดสิ่งที่ชอบhttp http://external_ip_from_GCP_console:8888การใช้httpเป็นสิ่งสำคัญรายละเอียดเล็ก ๆ น้อย ๆ และง่ายต่อการซ้อนทับ ขอบคุณ @Koushik สำหรับการรวบรวมคำตอบ ฉันเพิ่มคะแนนให้คำตอบของคุณเพราะมันได้ผลสำหรับฉัน
StatguyUser

รหัสผ่านเก็บไว้ที่ไหน? ดูเหมือนจะไม่พบjupyter_notebook_config.pyหลังจากตั้งรหัสผ่านในขั้นตอนที่ 4
liang

19

ใน RedHat 7 เราต้องอนุญาตพอร์ตเฉพาะก่อนที่จะรันคำสั่ง Jupiter 8080บอกว่าพอร์ต

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

จากนั้นเราสามารถเรียกใช้งานได้ตามปกติ ตัวอย่างเช่นการใช้:

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

หรืออะไรก็ได้ที่คุณต้องการ


ขอบคุณระบบของฉันคือ Centos 7 แต่ jupyter มีปัญหาในการให้บริการ ก่อนอื่นฉันปิดใช้งานไฟร์วอลล์ แต่ยังไม่สามารถให้บริการได้ แต่โดยเฉพาะอย่างยิ่งการใช้บรรทัดที่สอง ===> สมุดบันทึก jupyter --ip 0.0.0.0 - no-browser --port = 8080 --allow-root แก้ปัญหาได้ มันใช้งานได้แล้ว
RedArrow

เรียกใช้โน้ตบุ๊กโดยระบุipและportสมบูรณ์แบบ
Wenmin Wu

สิ่งนี้ช่วยแก้ปัญหาการเข้าถึงด้วย jupyterhub เช่นกันสำหรับฉัน jupyterhub พอร์ตมาตรฐานใช้ไม่อนุญาตให้เชื่อมต่อภายนอก 127.0.0.1
Eduardo Pignatelli

ใช้ได้กับอินสแตนซ์ ec2 เช่นกัน เป็นเรื่องที่สับสนเล็กน้อยเนื่องจากกลุ่มความปลอดภัยที่อนุญาตให้ใช้พอร์ตนั้น แต่เซิร์ฟเวอร์ไม่พร้อมใช้งานจนกว่าคุณจะรันด้วยพารามิเตอร์เหล่านี้
Vadim

10

จากบรรทัดคำสั่งของคุณเราสามารถเห็นเซิร์ฟเวอร์ jupyter ของคุณกำลังทำงานตามปกติสาเหตุที่คุณไม่สามารถเข้าถึงเซิร์ฟเวอร์ jupyter ระยะไกลของคุณได้คือกฎไฟร์วอลล์ของเซิร์ฟเวอร์ centos6.5 ระยะไกลของคุณบล็อกคำขอที่เข้ามาจากเบราว์เซอร์ในพื้นที่ของคุณนั่นคือบล็อก tcp ของคุณ: 8045 พอร์ต
sudo ufw allow 80 # enable http server
sudo ufw allow 443 # enable https server
sudo ufw allow 8045 # enable your tcp:8045 port
จากนั้นลองเข้าถึง jupyter ของคุณอีกครั้ง


บางทีคุณอาจต้องยกเลิกการแสดงความคิดเห็นและแก้ไขตำแหน่งนั้นในjupyter_notebook_config.pyไฟล์ของคุณ:

c.NotebookApp.allow_remote_access = True

และแม้แต่ปิดVPNของคุณหากคุณมี


8

หรือคุณสามารถสร้างทันเนลไปยังเซิร์ฟเวอร์:

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

จากนั้นเปิด127.0.0.1:8888ในเบราว์เซอร์ของคุณ

นอกจากนี้คุณยังละเว้น-i <your_key>ถ้าคุณไม่มี identity_file


ในกรณีที่พอร์ตหนึ่งใช้พอร์ตที่แตกต่างกันพอร์ต8888:127.0.0.1:8888แรก8888คือพอร์ตบนเครื่องโลคัลพอร์ตต่อมาคือพอร์ตบนเครื่องระยะไกล
Yuen Tau

4

อีกสาเหตุหนึ่งอาจเป็นไฟร์วอลล์ เรามีปัญหาเดียวกันกับ

สมุดบันทึก jupyter --ip xx.xx.xx.xxx - พอร์ต xxxx

จากนั้นก็กลายเป็นไฟร์วอลล์บน centOS7 ใหม่ของเรา


2

ฉันใช้ Anaconda3 บน Windows 10 เมื่อคุณติดตั้งโปรดจำไว้ว่าให้ตั้งค่าสถานะ "add to Enviroment Variables"


วิชาบังคับก่อน: ไฟล์คอนฟิกูเรชันของโน้ตบุ๊ก

ตรวจสอบดูว่าคุณมีไฟล์การกำหนดค่าโน้ตบุ๊กหรือ jupyter_notebook_config.pyไม่ ตำแหน่งเริ่มต้นสำหรับไฟล์นี้คือโฟลเดอร์ Jupyter ของคุณที่อยู่ในโฮมไดเร็กทอรีของคุณ:

  • Windows: C:\\Users\\USERNAME\\.jupyter\\jupyter_notebook_config.py
  • OS X: /Users/USERNAME/.jupyter/jupyter_notebook_config.py
  • ลินุกซ์: /home/USERNAME/.jupyter/jupyter_notebook_config.py

ถ้าคุณยังไม่มีโฟลเดอร์ Jupyter หรือถ้าโฟลเดอร์ Jupyter ของคุณไม่มีไฟล์คอนฟิกูเรชันของโน้ตบุ๊กให้รันคำสั่งต่อไปนี้:

$ jupyter notebook --generate-config

คำสั่งนี้จะสร้างโฟลเดอร์ Jupyter หากจำเป็นและสร้างไฟล์กำหนดค่าโน้ตบุ๊กjupyter_notebook_config.pyในโฟลเดอร์นี้


โดยค่าเริ่มต้น Jupyter Notebook จะยอมรับการเชื่อมต่อจาก localhost เท่านั้น

แก้ไขjupyter_notebook_config.pyไฟล์ดังต่อไปนี้เพื่อยอมรับการเชื่อมต่อขาเข้าทั้งหมด:

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

คุณจะต้องเปลี่ยน IP ที่โน้ตบุ๊กจะรับฟัง:

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


0

หากคุณใช้สภาพแวดล้อม Conda คุณควรตั้งค่าไฟล์กำหนดค่าอีกครั้ง และตำแหน่งไฟล์จะเป็นแบบนี้ ฉันไม่ได้ตั้งค่าไฟล์ config หลังจากสร้าง env ใน Conda และนั่นคือปัญหาการเชื่อมต่อของฉัน

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


0

ฉันพบปัญหาเดียวกัน แต่ไม่มีวิธีแก้ปัญหาข้างต้นที่ใช้ได้กับฉัน แต่ถ้าฉันตั้งค่าโน้ตบุ๊ก jupyter เวอร์ชันนักเทียบท่าโดยใช้การกำหนดค่าเดียวกันมันก็ใช้ได้สำหรับฉัน

สำหรับสถานะของฉันอาจเป็นปัญหาเกี่ยวกับกฎ iptables บางครั้งคุณอาจใช้ufwเพื่ออนุญาตเส้นทางทั้งหมดไปยังเซิร์ฟเวอร์ของคุณ แต่ของฉันเพียงiptables -Fเพื่อล้างกฎทั้งหมด จากนั้นตรวจสอบiptables -L -nดูว่าใช้งานได้หรือไม่

แก้ไขปัญหาแล้ว


0

แก้ไขสิ่งต่อไปนี้ในไฟล์ jupyter_notebook_config
ป้อนที่อยู่ IP ของคอมพิวเตอร์จริง
c.NotebookApp.ip = '192.168.xx'
c.NotebookApp.allow_origin = '*'

ในฝั่งไคลเอ็นต์เปิดสมุดบันทึก jupyter ด้วยรหัสผ่านสำหรับเข้าสู่ระบบรหัสผ่าน
สมุดบันทึก jupyter

หลังจากตั้งรหัสผ่านล็อกอินบนเบราว์เซอร์แล้วพิมพ์ที่อยู่ IP ของเซิร์ฟเวอร์ระยะไกลตามด้วยพอร์ต ตัวอย่าง 192.168.1.56:8889


0

ลองทำตามขั้นตอนด้านล่าง:

คำสั่งต่อไปนี้แก้ไขการอ่าน / เขียน

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

0

ฉันประสบปัญหาที่คล้ายกันและฉันแก้ไขได้หลังจากทำสิ่งต่อไปนี้:

  1. ตรวจสอบไฟล์คอนฟิกูเรชัน jupyter ของคุณ: มีรายละเอียดอธิบายไว้ที่นี่ https://testnb.readthedocs.io/en/stable/examples/Notebook/Configuring%20the%20Notebook%20and%20Server.html

- คุณจะต้องจากลิงค์ด้านบนเพื่อเรียนรู้วิธีทำให้เซิร์ฟเวอร์ jupyter รับฟัง IP ของเครื่องในพื้นที่ของคุณ - คุณจะต้องรู้ IP ของเครื่องในเครื่องของคุณ (ฉันใช้ "ifconfig -a" บนอูบุนตูเพื่อค้นหาสิ่งนั้น) - โปรดตรวจสอบ centos6

หลังจากเสร็จสิ้นการตั้งค่าการกำหนดค่าของคุณคุณสามารถเรียกใช้สมุดบันทึก jupyter ที่ IP ในเครื่องของคุณ: สมุดบันทึก jupyter --ip = * --no-browser

โปรดแทนที่ * ด้วยที่อยู่ IP ของคุณเช่น: สมุดบันทึก jupyter --ip = 192.168.xx - no-browser

ตอนนี้คุณสามารถเข้าถึงเซิร์ฟเวอร์ jupyter ของคุณจากอุปกรณ์ใด ๆ ที่เชื่อมต่อกับเราเตอร์โดยใช้ ip: port นี้ (โดยปกติพอร์ตคือ 8888 ดังนั้นในกรณีของฉันฉันใช้ "192.168.xx: 8888" เพื่อเข้าถึงเซิร์ฟเวอร์ของฉันจากอุปกรณ์อื่น ๆ )

ตอนนี้หากคุณต้องการเข้าถึงเซิร์ฟเวอร์นี้จาก IP สาธารณะคุณจะต้อง:

  1. ค้นหา IP สาธารณะของคุณ (เพียงพิมพ์ใน google ว่า IP ของฉันคืออะไร)
  2. ใช้ที่อยู่ IP นี้แทน IP ในพื้นที่ของคุณเพื่อเข้าถึงเซิร์ฟเวอร์จากอุปกรณ์ใด ๆ ที่ไม่ได้เชื่อมต่อกับเราเตอร์เดียวกันโปรดทราบ: หากเซิร์ฟเวอร์ linux ของคุณทำงานบนเครื่องเสมือนคุณจะต้องตั้งค่าเราเตอร์ของคุณเพื่ออนุญาตให้เข้าถึง VB ของคุณจาก IP สาธารณะ การตั้งค่าขึ้นอยู่กับประเภทเราเตอร์ มิฉะนั้นคุณควรจะสามารถเข้าถึงเซิร์ฟเวอร์โดยใช้ IP สาธารณะและพอร์ตที่ตั้งค่าไว้จากอุปกรณ์ใด ๆ ที่ไม่ได้เชื่อมต่อกับเราเตอร์ของคุณหรือใช้ IP ในเครื่องของคุณและพอร์ตที่ตั้งค่าจากอุปกรณ์ใด ๆ ที่เชื่อมต่อกับเราเตอร์เดียวกัน!

-1

นั่นคือที่อยู่ IP ส่วนตัวของคุณหรือไม่? หากเป็นเช่นนั้นคุณจะต้องใช้สาธารณะของคุณ ไปที่ ipchicken เพื่อค้นหาว่ามันคืออะไร ฉันรู้ว่าคุณอยู่ใน LAN เดียวกัน แต่ลองใช้วิธีนี้เพื่อดูว่าสามารถแก้ปัญหาได้หรือไม่


-2

ใครที่ยังติดขัด - ทำตามคำแนะนำในหน้านี้

โดยทั่วไป:

  1. ทำตามขั้นตอนตามที่ AWS อธิบายไว้ในเบื้องต้น

    1. เปิด SSH ตามปกติ
    2. source activate python3
    3. Jupyter Notebook
  2. ไม่ต้องตัดแปะอะไร เปิดหน้าต่างเทอร์มินัลใหม่แทนโดยไม่ต้องปิดหน้าต่างแรก

  3. ในหน้าต่างใหม่ให้ป้อนคำสั่ง SSH ตามที่อธิบายไว้ในลิงค์ด้านบน

  4. เปิดเว็บเบราว์เซอร์และไปที่ http://127.0.0.1:8157

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.