연산 세션에 SSH/SFTP 접속하기 (Linux/Mac/Visual Studio Code)

Backend.AI는 생성된 연산 세션(컨테이너)에 SSH/SFTP 접속을 지원하고 있습니다. 이번 절에서는 그 방법에 관해 알아봅니다.

주석

SSH/SFTP 지원은 데스크탑 앱 Web-UI에서만 지원하며, 웹 기반 Web-UI에서는 아직 지원하지 않습니다. 데스크탑 앱은 https://github.com/lablup/backend.ai-webui/releases 에서 다운로드 할 수 있습니다. Backend.AI 클러스터 서버 버전과 호환되는 Web-UI 앱을 받아야 최상의 호환성을 유지할 수 있습니다. Backend.AI 클러스터의 버전은 GUI 우측 상단에 있는 설정 아이콘을 클릭하면 나오는 “About Backend.AI” 메뉴를 클릭하여 확인할 수 있습니다.

For Linux / Mac

먼저 연산 세션을 하나 생성한 후 Control의 앱 아이콘(첫 번째 버튼)을 클릭하고 SSH / SFTP 아이콘을 클릭합니다. 그러면 해당 컨테이너 내부에서 SSH/SFTP 접속을 할 수 있도록 해주는 데몬(demon)이 뜨게 되고, 로컬 proxy를 통해 Web-UI 앱과 컨테이너 내부의 데몬이 연결됩니다.

경고

이 아이콘을 클릭하기 전에는 해당 세션에 SSH/SFTP 접속을 할 수가 없습니다. 만약, Web-UI 앱을 껐다가 다시 켜게 되면 로컬 proxy와 Web-UI 앱 사이의 연결이 초기화 되므로 SSH/SFTP 아이콘을 다시 한 번 클릭해주어야 합니다.

이어 SSH/SFTP connection 정보를 담고 있는 다이얼로그가 뜨는데, SSH URL에 적힌 접속 주소(특히 할당 받은 포트)를 기억한 뒤 id_container 파일 다운로드 링크를 클릭하여 로컬 머신에 받아 둡니다. 이 파일은 자동으로 생성된 SSH private key입니다. 링크를 통해 다운로드하는 대신 터미널 또는 Jupyter Notebook으로 /home/work/ 하위에 위치하고 있는 id_container 파일을 다운로드 할 수도 있습니다. 자동 생성된 SSH key는 세션이 새로 생성될 때마다 변할 수도 있는데, 이럴 경우 다시 다운로드 받아야 합니다.

Starting SSH/SFTP daemon inside a compute session (container)

다운로드 받은 SSH private key로 연산 세션에 SSH 접속을 하려면 쉘 환경에서 다음과 같은 명령을 내릴 수 있습니다. 이 때 -i 옵션에 다운로드 받은 id_container 파일의 위치를, -p 옵션에 연산 세션이 할당 받은 포트 번호를 적어주어야 합니다. 연산 세션 내의 사용자는 보통 work 로 설정되는데, 만약 work 가 아닌 다른 계정을 사용하는 경우라면 work@localhost 에서 work 부분을 실제 접속되는 계정으로 바꾸어 주어야 합니다. 정상적으로 명령을 내렸다면 연산 세션에 SSH 접속이 이루어지고 컨테이너 내부의 쉘 환경에 접속되는 것을 확인할 수 있습니다.

$ ssh -o StrictHostKeyChecking=no \
>     -o UserKnownHostsFile=/dev/null \
>     -i ~/.ssh/id_container \
>     work@localhost -p 52468
Warning: Permanently added '[127.0.0.1]:52468' (RSA) to the list of known hosts.
f310e8dbce83:~$

SFTP 접속을 하는 방법도 거의 같습니다. SFTP 클라이언트를 실행하고 public key 기반의 접속 설정을 한 후 id_container 를 SSH private key로 지정하면 됩니다. FTP 클라이언트 별로 사용 방법은 상이할 수 있으므로, 자세한 방법은 각 FTP 클라이언트 매뉴얼을 참고 하십시오.

주석

SSH/SFTP 접속 포트 번호는 연산 세션을 생성할 때마다 임의의 값이 할당됩니다. 만약, SSH/SFTP 접속 포트를 특정한 값으로 고정하고 싶다면, 사용자 설정 메뉴에서 “Preferred SSH Port” 항목에 포트 번호를 기입할 수 있습니다. 세션 내의 다른 서비스와의 충돌을 가능한 방지하기 위해 포트 번호는 10000-65000 사이의 값을 지정하는 것을 권장합니다. 다만, 두 개 이상의 연산 세션에서 동시에 SSH/SFTP 연결을 맺게되는 경우, 두 번째 SSH/SFTP 연결은 지정된 포트를 사용할 수 없으므로 (첫 번째 SSH/SFTP 연결이 이미 점유) 임의의 포트 번호를 할당받게 됩니다.

주석

만약 id_container 대신 사용자 자신의 SSH keypair를 사용하고 싶다면, .ssh 라는 이름의 사용자 폴더를 하나 만듭니다. 그 폴더 안에 authorized_keys 파일을 만든 후 사용할 SSH public key를 파일 내용으로 추가하면, 연산 세션 생성 후 id_container 파일을 다운로드 할 필요없이 자신의 SSH private key를 통해 SSH/SFTP 접속할 수 있습니다.

For Windows / FileZilla

Backend.AI Web-UI 앱에서 지원하는 SSH/SFTP 접속 방법은 OpenSSH 기반 public key 접속(RSA2048)입니다. 윈도우즈의 PuTTY 등 클라이언트를 통해 접속하려면 PuTTYgen 등과 같은 프로그램으로 SSH private key를 ppk 파일로 변환하는 작업이 추가로 합니다. 변환 방법은 다음 링크를 참조 할 수 있습니다: https://wiki.filezilla-project.org/Howto. 보다 쉬운 설명을 위해 이번 절에서는 Windows에서 FileZilla 클라이언트를 통해 SFTP 접속하는 방법에 관해 알아보겠습니다.

Linux/Mac에서의 접속 방법을 참고하여 연산 세션을 생성하고 접속 포트 확인과 id_container 다운로드를 수행합니다. id_container 는 OpenSSH 기반의 키이므로, 윈도우 또는 ppk 형태의 키만 지원하는 클라이언트를 사용할 경우 변환을 해야 합니다. 여기서는 PuTTY와 함께 설치되는 PuTTYgen 프로그램을 통해 변환을 해보겠습니다. PuTTYgen 프로그램을 실행한 후 Conversions 메뉴의 import key를 클릭합니다. 이어 뜨는 파일 선택 다이얼로그에서 다운로드 한 id_container 파일을 선택합니다. PuTTYGen의 Save private key 버튼을 클릭하여 id_container.ppk 라는 이름으로 파일을 저장합시다.

SSH key conversion with PuttyGen

이제 FileZilla 클라이언트 앱을 실행한 후 설정-연결-SFTP 페이지로 들어가 생성한 id_container.ppk (OpenSSH를 지원하는 클라이언트의 경우 id_container) 키 파일을 등록해 줍니다.

Filezilla settings to connect to compute session

사이트 관리자를 열고 새 사이트를 하나 만든 후 다음과 같이 접속 정보를 적어 줍니다.

Filezilla site setting

해당 컨테이너에 처음 접속하는 경우 다음과 같은 확인 창이 뜰 수 있습니다. 확인 버튼을 눌러 호스트 키를 저장합시다.

Unknown Host Key dialog

잠시 기다린 후 다음과 같이 접속이 되는 것을 확인할 수 있습니다. SFTP 접속을 통해 /home/work/ 및 마운트 된 Storage 폴더에 대용량 파일을 전송하는 등의 작업을 수행할 수 있습니다.

Filezilla connection established

For Visual Studio Code

로컬 Visual Studio Code에서 SSH/SFTP를 통해 Backend.AI 연산 세션에 접속하여 원격 개발할 수도 있습니다. 한번 연결을 하면, 연산 세션 상에 존재하는 모든 파일과 폴더를 활용하여 작업할 수 있습니다. 이번 절에서는 그 방법에 관해 알아봅니다.

우선, Visual Studio Code와 원격 개발(Remote Development) 확장팩을 설치해야합니다.

링크: https://aka.ms/vscode-remote/download/extension

Install remote ssh plugin on Visual Studio Code

확장팩 설치 후 연산 세션 접속을 위한 SSH 연결 설정을 진행합니다. SSH/SFTP 다이얼로그에서 “DOWNLOAD SSH KEY” 버튼을 클릭하여 연산 세션에 접속하기 위한 SSH 비밀키를 다운로드 합니다. 포트 번호도 기억해 두십시오.

Download SSH Key

다음으로 SSH 설정 파일을 수정합니다. ~/.ssh/config 파일(Linux/Mac) 또는 C:\Users\[user name]\.ssh/config (Windows) 파일을 텍스트 편집기로 열고 다음 블록을 추가합니다. 편의를 위해 호스트 이름을 vscode 로 설정했지만, 이는 원하는 대로 바꾸셔도 됩니다.

이제 Visual Studio Code의 View - Command Palette… 메뉴를 선택합니다.

View > comma

Visual Studio Code는 연결할 호스트의 타입을 자동으로 탐지합니다. Remote-SSH: Connect to Host… 를 선택해봅시다.

SSH connect

여기서는 .ssh/config 의 호스트 목록을 볼 수 있습니다. 연결할 호스트(vscode)를 선택합니다.

Select remote ssh select Host

연결이 된 후 빈 창이 표시됩니다. 상태 표시 줄을 참조하면 연결된 호스트를 확인 할 수 있습니다. 연결이 된 후 빈 창이 표시됩니다. 상태 표시 줄을 참조하면 연결된 호스트를 확인 할 수 있습니다.

Finished remote ssh connection

로컬에서와 마찬가지로 파일 > 열기… 또는 파일 > 워크스페이스 열기… 메뉴를 통해 원격 호스트에서 폴더나 워크스페이스를 열 수 있습니다!

open remote host file directory