연산 세션에 SSH/SFTP 접속하기

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

주석

SSH/SFTP 지원은 데스크탑 앱 콘솔에서만 지원하며, 웹 기반 콘솔에서는 아직 지원하지 않습니다.

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

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

경고

이 아이콘을 클릭하기 전에는 해당 세션에 SSH/SFTP 접속을 할 수가 없습니다. 만약, 콘솔 앱을 껐다가 다시 켜게 되면 로컬 proxy와 콘솔 앱 사이의 연결이 초기화 되므로 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 10022
Warning: Permanently added '[127.0.0.1]:9922' (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 접속할 수 있습니다.

연산 세션에 SSH/SFTP 접속하기 (Windows / FileZilla)

앱에서 지원하는 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