1. 관련 패키지 설치
$ sudo apt install nodejs
$ sudo apt install npm
$ sudo npm install -g configurable-http-proxy
2. jupyterhub와 인증관련 모듈 설치
$ sudo apt install python3-pip
$ sudo -H pip3 install --upgrade setuptools
$ sudo -H pip3 install jupyterhub
$ sudo -H pip3 install sudospawner
$ sudo -H pip3 install jupyterlab
3. 실행할 전용 사용자 추가
$ sudo adduser tester
$ sudo nano /etc/sudoers
# 전역환경에 설치한 sudospawner 실행 파일을 JUPYTER_CMD로 설정
Cmnd_Alias JUPYTER_CMD = /usr/local/bin/sudospawner
# tester 사용자가 jupyterhub 그룹에 있는 사용자에 대해서 암호없이 JUPYTER_CMD를 실행
tester ALL=(%jupyterhub) NOPASSWD:JUPYTER_CMD
4. jupyterhub 그룹 추가
$ sudo groupadd jupyterhub
$ sudo usermod -a -G jupyterhub tester
$ sudo usermod -a -G jupyterhub tester1
$ sudo usermod -a -G jupyterhub tester2
6. root가 아닌 사용자가 PAM 동적인증 가능하게 하기
$ sudo usermod -a -G shadow tester
$ sudo -H pip3 install pamela
$ sudo -u tester python3 -c "import pamela, getpass; print(pamela.authenticate('$USER', getpass.getpass()))"
### tester가 jupyterhub를 실행시키면 사용자가 각자 아이디와 비번으로 입력하여 사용자인증 가능토록 설정 확인
$ sudo -u tester python3
>>> import pamela
>>> pamela.authenticate('tester1','tester1passwd')
>>> exit()
5. sudospawner 설정 테스트
$ sudo -u tester sudo -n -u $USER /usr/local/bin/sudospawner --help
맞게설정되었으면 help 실행
$ sudo -u tester sudo -n -u $USER echo 'fail'
sudo: 암호가 필요합니다
7. jupyterhub 폴더 만들기
$ sudo mkdir /etc/jupyterhub
$ sudo mkdir /etc/jupyterhub/pythonex
$ sudo chown -cR tester:jupyterhub /etc/jupyterhub
$ sudo chmod -R 755 /etc/jupyterhub/pythonex
8. configuration
$ cd /etc/jupyterhub
$ sudo -u tester jupyterhub --generate-config
9. jupyterhub_config.py 설정
$ sudo nano /etc/jupyterhub/jupyterhub_config.py
==================================
# set of users who can administer the Hub itself
c.Authenticator.admin_users = {'tester'}
## The public facing port of the proxy.
c.JupyterHub.port = 9091
# set for sudospawner
c.JupyterHub.spawner_class = 'sudospawner.SudoSpawner'
c.SudoSpawner.sudospawner_path = '/usr/local/bin/sudospawner'
# set of users working directory
c.Spawner.notebook_dir = '/etc/jupyterhub/pythonex'
# jupyterlab을 띄우고 싶으면 jupyterlab을 설치하고 디폴트 경로 설정
#c.Spawner.default_url = '/lab'
# Supports Linux and BSD variants only.
c.LocalAuthenticator.create_system_users = True
## The command to use for creating users as a list of strings
c.Authenticator.add_user_cmd = ['adduser', '--force-badname', '-q', '--gecos', '""', '--disabled-password']
===================================
Alt + a, Ctr + k
10. 서버 실행, 반드시 cd /etc/jupyterhub 폴더에서 실행
$ sudo -u tester jupyterhub jupyterhub_config.py
11. 서비스 등록 및 자동실행
$ sudo nano /lib/systemd/system/jupyterhub.service
===============
[Unit]
Description=Jupyterhub
[Service]
User=root
ExecStart=/usr/local/bin/jupyterhub -f /etc/jupyterhub/jupyterhub_config.py
[Install]
WantedBy=multi-user.target
================
12. 데몬등록 실행 cd /lib/systemd/system/
$ sudo systemctl daemon-reload
$ sudo systemctl enable jupyterhub
$ systemctl start jupyterhub
13. 실행중 로그 보기
$ journalctl -u jupyterhub
14. 서비스 취소시
$ sudo systemctl stop jupyterhub
$ sudo systemctl disable jupyterhub
15. 추가 가입자 설정
$ sudo adduser tester3
$ sudo usermod -a -G jupyterhub tester3
16. 추가 사용자 쓰기 설정
$ sudo chmod -R 775 /etc/jupyterhub/pythonex
* 지우기 : $ sudo userdel -r or f tester3
* group 확인: $ grep jupyterhub /etc/group