원격접속 - SSH 사용하기
클라우드(cloud) 서비스를 개발 환경으로 사용하면 편리한 점들이 몇 가지 있다.
첫 째로 언제 어디서나 네트워크만 연결되어 있으면 코딩, 계산, 신경망 훈련 등 개발을 이어서 할 수 있다. 둘 째 따로 리눅스 컴퓨터를 마련하거나 기존 컴퓨터에 가상머신(virtual machine)을 설치하는 수고를 하지 않아도 된다. 더불어 개발용 컴퓨터를 관리해야 하는 수고도 덜 수 있다. 요즘은 1CPU, 1GB 정도의 가벼운 환경은 월 1만원 또는 $10 이하에 제공하는 서비스들도 많아서 학생이 개인 프로젝트를 진행하기에도 큰 부담이 되지 않는다. 이 밖에도 장점들이 많을 것이다.
필자는 코딩용 컴퓨터로 클라우드 서비스에 리눅스를 설치해서 사용하고, 보통 윈도우 데스크탑이나 노트북으로 연결해서 사용한다.
윈도우 운영체제가 설치된 컴퓨터에서 리눅스 운영체제가 설치되어 있는 클라우드 컴퓨터로 접속할 때 Putty와 같은 터미널(terminal) 프로그램을 많이 사용한다. 아래 그림과 같이 단색 배경에 문자를 이용해서 명령과 응답을 주고받는 화면을 본 경험이 있을 것이다.
개인 PC와 클라우드 환경을 연결할 때 SSH(Secure Shell) 방식을 많이 사용하는데, 예전부터 사용해왔었던 텔넷(Telnet)이 암호화 되지 않은 정보를 주고 받기 때문에 보안에 취약했던 점을 보완한 것이다.
이 SSH 기술에는 암호화하는 키(key, 열쇠라고 하지만 실제 일정한 길이의 문자열이다)와 복호화하는 키가 서로 다른 공개키 암호화(PKI, Public Key Infrastructure) 기술이 사용된다. 즉, 개인키, 공개키 두 개의 키를 가지고 서로 상대방을 확인하고 암호화된 정보를 주고받게된다.
SSH를 이용해서 클라우드 컴퓨터에 어떻게 접속하는지 살펴보자. 보통 개인 PC에서는 윈도우를 많이 사용하고, 클라우드 컴퓨터는 리눅스를 많이 사용하므로 윈도우 PC → 리눅스 컴퓨터 접속을 기준으로 설명하겠다.
가장 먼저 개인키(private key), 공개키(public key) 두 개의 키가 필요하다. 구하는 것은 어렵지 않다. 만들면 된다. 많이 사용하는 PuTTY 프로그램을 설치하면 아래와 같이 PuTTYgen 프로그램을 이용해서 두 개의 키를 만들 수 있다.
아래 URL에서 PuTTY 프로그램을 구할 수 있다.
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
PuTTYgen을 실행시키면 아래와 같이 키 생성 화면이 나타난다.
키 형식은 일반적으로 RSA 방식을 많이 사용한다. 윈도우의 'Generate' 버튼을 클릭하고 PuTTygen 윈도우 내부 영역에서 마우스 포인터를 움직여주면 개인키와 공개키가 만들어진다.
키 암호(Key passphrase)는 설정하면 키를 이용할 때 암호를 확인하고, 설정하지 않으면 암호를 묻지 않는다. 따라서 반드시 설정해야 하는 것은 아니다.
아직 윈도우를 닫지 말자. 공개키는 위 화면의 파란색 테두리 사각형 안쪽에 문자열로 보여지고, 개인키는 'Save private key' 버튼을 클릭해서 '반드시' 저장해 두어야 한다. 개인키는 확장자 이름이 .ppk로 저장된다.
클라우드 서비스에서 서비스 인스턴스(클라우드에서 컴퓨터에 해당한다)를 생성하면 관리자 계정 하나만 존재한다. 하지만 관리자로 로그인해서 사용하는 것은 보안 측면에서 좋지 않다. 더불어 여러명의 사용자가 관리자 ID 하나를 공유해서 사용하는 것은 더 좋지 않다. 따라서 일반적으로 adduser 명령 등으로 새로 계정을 만들어서 사용하게 된다.
클라우드의 서비스 인스턴스에 관리자(root 혹은 서비스 인스턴스 생성 시에 입력했었던 계정 이름)로 접속한다. 첫 접속은 Telnet으로 이루어지는 경우도 있고 관리자 계정은 처음부터 SSH를 통해 접속할 수 있는 경우도 있다. 이는 일반적으로 관리자의 공개키를 인스턴스 생성 시에 클라우드 서비스에서 관리자의 홈 디렉토리에 설치해주기 때문이다(개인키는 다운로드 등으로 받을 수 있도록 해 준다).
adduser 명령 등으로 새로 계정을 생성한 후 사용자를 새로 생성한 계정으로 변경한다.
$>su <새로 생성한 계정이름>
생성된 계정의 홈 디렉토리로 이동하자. 홈 디렉토리에 .ssh라는 이름으로 디렉토리를 하나 만든다.
$>mkdir .ssh
.ssh 디렉토리 아래에 authorized_keys 파일을 생성하고 그 내용은 PuTTygen에서 생성했던 공개키를 붙여넣는다. PuTTygen 윈도우를 닫기 전에 생성한 개인키를 반드시 저장해서 보관해두어야 한다. 이제 PuTTygen 윈도우를 닫아도 된다.
$>vim .ssh/authorized_keys
내용을 저장하고 에디터를 닫은 후 아래 명령을 차례로 실행해서 디렉토리를 다른 사용자들이 볼 수 없도록 만든다.
$>chmod 700 .ssh
$>chmod 644 .ssh/authorized_keys
700 권한은 rwx------, 즉 소유자(Owner)만 읽고(r) 수정(w) 및 실행(x)할 수 있고(rwx → 2진수 111 = 7) 소유자와 같은 그룹(Group) 및 다른 사용자(Others)는 파일에 접근할 수 있는 권한이 없는 ---(--- → 2진수 000 = 0) 상태를 의미한다. 644 권한은 rw-r--r--, 즉 소유자는 수정 및 읽을 수 있고(rw- → 2진수 110 = 6) 소유자와 같은 그룹 및 다른 사용자는 읽을수 만 있는 권한을 의미한다.
다음으로 클라우드에 접속할 PC에서 PuTTY와 같은 터미널 프로그램을 실행시킨다. 이 때 인증을 위한 수단으로 PuTTygen을 통해서 생성했었던 개인키를 지정한다.
클라우드 인스턴스의 IP 혹은 Domain name을 입력하고 터미널을 이용해서 접속(Open)하면 새로 생성한 사용자 계정으로 SSH를 이용해서 접속할 수 있다.
■