[Python] EC2에 Jupyter Notebook 실행하기(ssh 포트포워딩)

Denver·2022년 12월 10일
0

python

목록 보기
4/5
post-thumbnail

0. 실행 환경

AWS EC2 t2.xlarge
OS : Red Hat 9.1
Python :3.9
Jupyter Notebook 6.4.12

1. Jupyter Notebook 설정

Jupyter Notebook 설치 후 비밀번호를 설정한다.
꼭 필요한 과정은 아니다.
다만 비밀번호를 생성하지 않으면 실행 시 마다 생성되는 token 값으로 접속해야한다.

1-1. Jupyter Notebook 비밀번호 생성

python
>>> from notebook.auth import passwd
>>> passwd()
Enter password: # 비밀번호 입력
Verify password: # 비밀번호 입력
'<agon2/sha ... PASSWORD_HASH>'
# 비밀번호 2번 입력하면 비밀번호 해쉬값이 나오는데 !꼭! 복사해둔다
>>> exit()

1-2. 비밀번호 설정

# 설정 파일 생성
jupyter notebook --generate-config
# 설정 파일 편집
vi /home/ec2-user/.jupyter/jupyter_notebook_config.py
# 위에서 생성된 비밀번호 해쉬값 입력
conf.NotebookApp.password = u'<PASSWORD_HASH>'

2. Jupyter Notebook 실행

jupyter notebook

1번을 생략했다면 접속 URL을 출력하는데 복사해둔다.


3. SSH 포트포워딩

# 서버 8888포트를 로컬 <LOCAL_PORT> 포트로 포트포워딩
# (jupyter notebook 기본 포트 8888)
ssh -i "<key.pem>" -L <LOCAL_PORT>:localhost:8888 <username>@<public_ip>
# 실행중인 프로세스 확인
ps

# LISTEN 포트 확인
sudo lsof -i -P -n | grep LISTEN
# 58971 프로세스에서 8888 포트 LISTEN



4. Jupyter Notebook 접속

localhost:8888

비밀번호 입력 창이 나오는데 1번에서 입력한 비밀번호를 입력한다.

1번을 생략했다면 2번에서 복사한 URL로 접속한다.




실패 기록

Jupyter Notebook 설치, 실행 후
http(s)://<PUBLIC_IP>:8888 로 접속하면 연결이 안됐다.
인바운드는 내 ip에서는 모두 허용이었다.
인증 키를 만들고,
비밀번호를 생성하고,
jupyter_notebook_config.py 에 설정하고,
접속하면 된다던데 안된다.

접속 시도하면 아래 로그가 발생한다.
https말고 http로 접속하라는데 그래도 안된다.

handle: <Handle BaseAsyncIOLoop._handle_events(8, 1)>
Traceback (most recent call last):
  File "/opt/anaconda/anaconda3/lib/python3.9/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/opt/anaconda/anaconda3/lib/python3.9/site-packages/tornado/platform/asyncio.py", line 189, in _handle_events
    handler_func(fileobj, events)
  File "/opt/anaconda/anaconda3/lib/python3.9/site-packages/tornado/netutil.py", line 276, in accept_handler
    callback(connection, address)
  File "/opt/anaconda/anaconda3/lib/python3.9/site-packages/tornado/tcpserver.py", line 288, in _handle_connection
    connection = ssl_wrap_socket(
  File "/opt/anaconda/anaconda3/lib/python3.9/site-packages/tornado/netutil.py", line 608, in ssl_wrap_socket
    context = ssl_options_to_context(ssl_options)
  File "/opt/anaconda/anaconda3/lib/python3.9/site-packages/tornado/netutil.py", line 576, in ssl_options_to_context
    context.load_cert_chain(
ssl.SSLError: [SSL] PEM lib (_ssl.c:4065)

Q.

ssh는 원격접속할 때나 썼는데 이렇게 포트포워딩은 처음 해봤다.
SSH 포트포워딩 알아보자

참고 자료

Jupyter Notebook DOCS

profile
까먹었을 미래의 나를 위해

1개의 댓글

comment-user-thumbnail
2023년 3월 3일

이 문제 때문에 골치가 아팠는데 정말 감사합니다!

답글 달기