듀얼 부팅 [Windows10/Ubuntu] ML/DL 환경세팅 : Part 3 - SSH/Jupyter notebook 서버 설치!

4 minute read

우분투 환경이 모두 설치되었다면 이제 서버를 구성해야한다. Part 1에서 말했듯이 SSH키로 VScode를 사용하고 Jupyter notebook 서버를 켜서 접속할 것이기 때문에 두 가지를 모두 구성하기로한다.

작업환경에 대한 설명은 듀얼 부팅 [Windows10/Ubuntu] ML/DL 환경세팅 : Part 1: Ubuntu 설치에서 확인할 수 있다.

1. 우분투 SSH 서버 설치

ssh 서버 설치방법은 간단하다. 우선 아래 명령어를 입력한다.

$ sudo apt-get install openssh-server

설치를 했다면 아래 명령어를 통해서 서버가 열려있는지 확인해 볼 수 있다. 만약 netstat이 없다면 sudo apt install net-tools를 입력해서 설치하도록 한다. ssh server의 기본값은 ip가 0.0.0.0 그리고 포트번호가 22번이다. 0.0.0.0:22 가 있는지 확인하면된다.

$ netstat -atn


확인이 되었다면 localhost로 접속을 해서 되는지 확인해보자. localhost로 접속한다는 것은 내 컴퓨터로 내 컴퓨터에 접속하겠다는 말이다. 아래와 같이 나왔다면 성공이다.

$ ssh localhost


ssh server의 기본 포트번호는 22이고 주소는 0.0.0.0이다. 기본값을 바꾸고 싶다면 아래와 같이 입력해서 편집기로 수정할 수 있다. (만약 공유기를 사용중이라면 외부에서 서버에 접속시 외부IP와 포트포워딩으로 설정했던 포트번호를 설정해야한다.)

$ sudo vim /etc/ssh/sshd_config

방화벽을 사용한적이 없다면 아래와 같이 방화벽 사용 명령어를 입력하고 사용할 포트번호를 적는다.

$ sudo ufw enable
$ sudo ufw allow 22
$ sudo ufw reload

ssh 서버 시작과 종료는 아래 명령어로 해볼 수 있다.

$ service ssh start
$ service ssh stop

2. 외부에서 서버 클라이언트로 서버에 접속

서버에 접속하기위해서 나는 mobaXterm을 사용한다. mobaXterm은 여기에서 무료버전을 다운받으면 된다.

사용할 session을 만들고 아래 필요사항들을 적어준다.

  • Remote host : 접속할 서버 외부 ip주소(또는 도메인이 있다면 도메인 이름을 적으면 된다.)
  • Specifiy username : 세션 별칭을 입력한다.
  • Port : 앞서 설정했던 포트번호를 입력한다.


여기서 서버의 외부ip 주소를 모른다면 서버 터미널에서 아래 명령어로 쉽게 확인할 수 있다.

$ curl ifconfig.me

만든 세션을 클릭해서 설정했던 서버 계정의 비밀번호가 있다면 비밀번호를 입력해서 아래와 같이 화면이 나오면 연결 성공이다.


3. VScode 연결하기

SSH 서버를 vscode에서 서버에 연결하기 위해서는 앞서 설정했던 외부 IP와 유저이름을 잘 기억해두도록한다. VScode는 공식홈페이지에서 쉽게 설치할 수 있다.

설치했다면 vscode를 실행하고 ctrl + shift + x 를 써서 extentions 창으로 들어가자. Remote Development를 검색 후 install 하기로 한다.


설치를 다 했다면 F1 키를 누르고 remote ssh를 검색하면 아래 리스트에서 Open Configuration File…을 볼 수 있다. 클릭!


그리고나서 위에 첫번째와 같이 내 이름의 홈 폴더에 서버 정보를 작성하기로 한다.


ccofig 파일에 설정했던 외부 ip주소와 유저이름과 포트포워딩으로 지정한 포트번호도 함께적는다. 만약 공유기를 사용하지 않는다면 안적어도됨! Host에는 저장할 별명이름을 적으면된다.


이제 모든설정이 다되었고 다시 F1키를 눌러서 Connect to Host로 연결한다.


그러면 이렇게 저장된 목록을 선택할 수 있는 리스트가 나오는데 아까 설정했던 별명을 선택한다.


선택하면 이제 새로운 VScode의 윈도우 창이 켜지고 만약 서버 연결에 비밀번호를 설정했다면 비밀번호를 입력하라는 메세지가 나온다. 그리고 입력하면 연결끝!


이제 밖에서도 집과 연결에서 코딩할 수 있게된다.


4. Jupyter notebook 서버 설치

끝이 아니다. 이제 jupyter notebook 서버를 설치할 차례이다. 우선 주피터 노트북 서버를 설치하기 전에 Anaconda 부터 설치하도록 한다.

아나콘다 다운로드 페이지에 가서 리눅스 버전으로 쉘 파일을 다운받는다.

다운받았으면 보통은 download 폴더에 설치되므로 download로 경로를 옮긴 뒤 아래 명령어로 다운받은 쉘 파일을 실행한다.

$ bash Anaconda3-2019.10-Linux-x86_64.sh

명령어를 입력하면 라이센스에 대한 설명이 주르륵 나오는데 그냥 yes라고 입력하고 엔터를 누른다. 또 물어보는게나오면 계속 yes라고 하면된다.

설치가 다 되었다면 .bashrc에도 등록하자. 아래 명령어로 등록하면 콘솔 왼쪽에 (base)라고 나온다.

$ source ~/.bashrc 

등록이 됐다면 한번 터미널을 껐다가 켜주고(혹시모르니) conda -V와 python -V로 버전을 확인해보자

$ convda -V
conda 4.7.12
$ python -V
Python 3.7.4

만약 conda : command not found 라는 오류가 뜬다면, 당황하지말고 터미널을 껐다가 켜서 다시 명령어를 입력해보고 그래도 오류가 생긴다면 아래 명령어로 bashrc에 우선 들어간다.

$ vim ~/.bashrc

그리고 아나콘다 경로를 추가하도록 하자. 아래에서 jaehyuk은 내 이름이다. 만약 따라서 하는 중이라면 그대로 쓰지말고 꼭 본인꺼로 바꿔써야한다. 만약 다른 경로에 아나콘다를 설정했다면 해당 경로를 써야한다.

export PATH="/home/jaehuck/anaconda3/bin:$PATH"

그리고 나서 다시 bashrc를 실행시킨다.

$ source ~/.bashrc

이제 주피터 노트북 서버를 설정해보자. 우선 터미널에서 아래 명령어를 입력하여 jupyter_notebook_config.py 를 만든다.

$ jupyter notebook --generate-config

그리고 나서 주피터 노트북에서 key를 얻어야한다. ipython으로 파이썬을 켜주자.

$ ipython

다음으로 아래 코드를 입력후 Enter password가 생기면 비밀번호를 입력하고 Verify password가 나오면 앞서 입력한 비밀번호를 한 번 더 입력하자. 키를 눌러도 아무것도 안쳐지는것같지만 잘 입력이 되고있는 것이니 걱정말자. (비밀번호는 그대로 공개할 수 없으니 아무렇게나 수정하였다.)

In [1] : from notebook.auth import passwd
In [2] : passwd()
Enter password:
Verify password:
Out[2]: 'sha1:12j30t42330g208ehdsflhsdgt3412'
In [3]: exit()

이제 위에서 나온 키값 ‘sha1 ~ ‘을 복사하도록하자. 그리고 ipython은 exit()으로 종료한다.

그 다음 아래 명령어로 앞서 만든 jupyter_notebook_config 파일에 들어간다. 또다시 말하지만 jaehyuk은 본인 계정이름으로 바꿔적어주어야한다.

$ gedit /home/jaehyuk/.jupyter/jupyter_notebook_config.py

메모장이 켜졌다면 아래 리스트들을 수정하면 된다. 수정된 라인은 맨앞에 #을 지워주도록한다. 코드 뒤에 #은 따로 설명을 위해 달아놓은 주석이니 따라치지 않아도 된다.

c.NotebookApp.allow_origin = '*'
c.NotebookApp.notebook_dir = '../' # 시작 위치를 root로 지정하려면 이렇게 적으면된다.
c.NotebookApp.ip = '사용할 아이피 주소' # 나같은 경우 외부ip를 적었더니 error가 생겨 * 으로 했다.
c.NotebookApp.port = '포트번호' # 앞서 설정한 포트와는 중복으로 사용할 수 없다. 새로 포트포워딩하도록 한다.
c.NotebookApp.password = u'복사했던 키를 여기에 붙여넣는다.'
c.NotebookApp.open_browser = False # 서버로 실행될때 서버PC에서 창이 켜지지 않도록한다.

저장 후 종료하고 이제 서버를 시작하도록 한다.

$ jupyter notebook

서버가 실행됐다면 클라이언트쪽에서 주소창에 아래와 같이 입력하면 비밀번호를 입력하는 창이 생긴다.


이제 비밀번호를 입력해주면 끝이다.

5. 우분투 부팅시 서버 자동실행

ssh 서버와 주피터 노트북 서버 설정과 확인이 모두 끝났으니 이제 부팅시 자동으로 서비스를 시작하게 해주면 된다.

우선 Service 파일을 만들어야한다. 아래 명령어를 통해서 jupyter notebook service 파일을 만들어보자. 여기서 나는 파일명을 jupyterNotebook이라고 정했다.

$ sudo vim /etc/systemd/system/jupyterNotebook.service

편집기가 생겼다면 아래와 같이 작성한다. 앞에서와 마찬가지로 username은 본인 계정이름으로 바꿔써야한다. 여기서 WorkingDirectory를 나는 그냥 /home 으로 했다.

왜 이렇게 써야하는지 궁금했지만


[Unit]
Description=Jupyter Notebook Server

[Service]
Type=simple
PIDFile=/run/jupyterNotebook.pid
User=username
ExecStart=/home/username/anaconda3/bin/jupyter-notebook
WorkingDirectory=원하는작업경로

[Install]
WantedBy=multi-user.target

모두 작성했다면 이젠 service를 등록한다.

$ sudo systemctl daemon-reload
$ sudo systemctl enable jupyterNotebook
$ sudo systemctl start jupyterNotebook

이제 정상적으로 등록이 되어있는지 확인해야한다.

$ sudo systemctl status jupyterNotebook


이제 모두 확인되었으니 재부팅되어도 ssh 서버와 jupypter notebook은 자동으로 실행되어 언제든 편하게 사용할 수 있다!


Categories:

Updated:

Leave a comment