SSH, 생성부터 접속까지
지금까지 SSH란 무엇이고 왜 필요한지, 그리고 어떻게 작동하는지에 대하여 알아보았습니다. (참고: [클라우드 이해]SSH 명칭부터 접속까지 한 번에 알기 1 )
실제로 CSP를 사용할 때는 서버 쪽에서 직접 키 페어를 생성하여 우리에게 pem파일, 즉 개인 키를 제공해주었습니다.
하지만 이런 기능이 제공되지 않는 서버를 이용하고 있다거나, 평소 이용중인 키 페어가 존재할 경우에는 이 기능이 도움이 되지 못하죠. 그렇다면 우리가 직접 키 페어를 생성해서 원하는 서버에 접속하려면 어떻게 해야할까요? 그래서 지금부터 SSH 키 페어를 직접 생성해서 서버에 공개 키를 옮기고, 직접 서버에 접속하는 과정까지 진행해보도록 하겠습니다.
가장 먼저 SSH 방식을 진행하기 위해선 서버와 클라이언트에 SSH를 구동할 수 있는 프로그램이 설치되어 있어야 합니다. 최신 리눅스의 경우 대부분 SSH 클라이언트가 이미 설치되어 있고, 이는 윈도우도 마찬가지일 것입니다. 또한 CSP에서 제공하는 서버에는 대부분 SSH가 기본적으로 설치되기 때문에, 여기서는 언급하지 않겠습니다. 만일 서버 이미지가 리눅스가 아닌 윈도우일 경우 이 작업이 적용되지 않을 수 있으니 참고하시길 바랍니다.
윈도우는 SSH클라이언트 외에도 키 페어를 생성하기 위한 별도의 프로그램이 더 필요한데요, 자체적으로 제공하는 openSSH 클라이언트를 설치하여 커맨드창에서 해도 되고, 대표적으로 사용되는 프로그램인 PuTTY에서 별도로 설치해 사용하는 PuTTYgen을 써도 좋습니다. 여기서는 윈도우의 기본 커맨드 창을 이용해서 진행해보도록 하겠습니다.
[참고]
Putty를 활용한 원격 접속
Putty를 활용한 SSH 보안 접속
– 생성과정
Windows 10을 기준으로 진행하겠습니다. 먼저 제어판으로 가서 ‘앱 및 기능’ 페이지로 이동합니다. 다음으로 중앙에 ‘선택적 기능’을 누르면 여러가지 기능을 추가적으로 설치할 수 있는데, ‘기능 추가’ 버튼을 눌러 ‘openSSH 클라이언트’를 선택합니다. 설치를 누르면 순식간에 설치가 완료됩니다. 이로써 기본적인 프로그램 준비가 끝났습니다. 참 쉽죠?
제어판 > 앱 및 기능 > 선택적 기능 > OpenSSH 클라이언트 설치
다음으로는 윈도우 키를 눌러 ‘cmd’를 검색창에 입력합니다. ‘관리자 권한’으로 실행을 누르면 검은 창이 열립니다.
실행하고 가장 먼저 할 일은 ‘ssh-keygen’이라는 명령어를 입력하여 키 페어를 생성하는 것입니다.
엔터 키를 누르면 개인 키가 저장될 경로를 묻습니다. 아무것도 입력하지 않고 엔터 키를 누르면 기본적으로 지정된 경로에 자동으로 저장되므로, 따로 경로를 지정할 게 아니라면 바로 엔터를 누르면 됩니다. 보통 c/Users/user/.ssh/id_rsa 로 경로가 지정되어 있는데요. 여기서 Users는 C드라이브의 ‘사용자’폴더, user는 해당 OS 사용자의 이름으로 된 폴더를 의미하고, id_rsa는 키 페어 파일들의 이름이 됩니다.
엔터를 입력하면 passphrase를 입력하라는 메시지가 나옵니다. Passphrase는 개인 키 자체에 대한 비밀번호입니다. 이 암호를 지정해놓으면 만일 개인 키를 탈취하더라도 비밀번호를 모르면 서버에 접속할 수 없으므로, 한 층 더 강력한 보안을 할 수 있게 됩니다. 여기서는 그대로 엔터를 두 번 입력해서 passphrase를 생성하지 않도록 하겠습니다.
과정을 마치면 뭔가 특이한 그림이 나오면서 마무리가 됩니다. 키 페어가 잘 완성되었단 증거입니다. 한 번 확인해볼까요? 실제 컴퓨터의 c\Users\user\.ssh 경로로 이동해보겠습니다. 참고로, 앞서 말씀드린 것처럼 user폴더의 경우 사용자 환경에 따라 폴더명이 다를 수 있습니다.
예) (해당 OS의 사용자 이름이 Test-PC일 경우) C:\Users\Test-PC\.ssh
확인해보면 해당 경로에 .ssh 폴더가 생기고 그 안에 공개 키와 개인 키가 생겼음을 알 수 있습니다.
– 적용과정
이제 키 페어를 완성했으니 다음으로 서버에 공개 키를 옮길 차례입니다. 공개 키를 서버에 올리려면 먼저 서버에 접속해야 하고, 서버에 접속하려면 서버 아이디와 비밀번호, 외부에서 접근할 수 있는 서버의 ip주소가 필요합니다. 서버에 별도로 사용자를 지정한 적이 없다면 보통 CSP에서 사용자 계정을 따로 지정해 알려줬거나, 등록된 사용자가 없는 경우일 것입니다.
CSP에서 지정해 준 경우 그 아이디를 입력하고, 등록된 사용자가 없을 경우 root라는 아이디로 들어가면 됩니다. 여기서는 가비아 클라우드에서 생성한 g클라우드 서버를 대상으로 하겠습니다. 가비아 클라우드는 서버 생성 시 사용자를 따로 생성하지 않기 때문에 root가 아이디가 됩니다.
ip주소는 외부에서 연결할 수 있는 형식의 ip주소여야 하기 때문에, 사설 ip로는 이용할 수 없고 보통 ‘공인ip’ 또는 ‘서버 접속용 ip’라는 표현 등을 사용하여 표시되어 있습니다. 해당 서버에 접속할 수 있는 ip주소를 찾아 입력하면 됩니다.
입력할 정보가 준비되면 커맨드창에 다음 명령문을 입력합니다.
ssh (서버 아이디)@(ip주소)
엔터 키를 누르면 비밀번호를 요구합니다. 가비아의 경우 서버 생성 시 서버 root 아이디와 임시 비밀번호 정보를 메일로 보내기 때문에 생성 후 수신된 메일에서 비밀번호를 찾아 입력하면 됩니다. 비밀번호를 정상적으로 입력하고 엔터 키를 누르면 접속됩니다.
접속하고 나면 ls –a를 입력해봅시다. 출력된 리스트 중에 .ssh가 있다면 괜찮지만, 없다면 mkdir ~/.ssh 를 입력하여 .ssh 디렉토리를 생성합니다.
다시 윈도우로 돌아와서, 아까 확인 차 찾아가 보았던 개인 키가 저장된 경로에 다시 이동해보겠습니다. 이 중 id_rsa.pub 파일을 우클릭하여 ‘연결 프로그램’을 선택하고, 메모장을 선택합니다. 열리면 메모장에 뭔가 알 수 없는 글이 써 있는데, 이걸 컨트롤+A키를 눌러 모두 선택하고 복사합니다.
다시 커맨드창으로 돌아와서, 이번엔 echo를 입력한 뒤 한 칸 띄우고 마우스 우클릭을 해주면 아까 복사한 내용이 붙여넣기가 됩니다.
그 뒤에 >> ~/.ssh/authorized_keys를 입력해주고 엔터 키를 누릅니다.
정리하면 전체 명령문은 아래와 같습니다.
echo (공개 키 전문) >> ~/.ssh/authorized_keys
이 명령문을 입력하면 .ssh 디렉토리 안에서 authorized_keys라는 파일을 생성하면서, 입력한 공개 키 전문을 저장합니다. 이렇게 서버와 클라이언트의 모든 접속 준비가 완료되었습니다.
– 접속과정
어느새 모든 준비가 끝났습니다. 이제 아까와 동일한 명령문을 써서 서버에 접속해봅시다. 아까와는 달리 비밀번호를 요구하지 않고 바로 접속할 수 있을 것입니다. 단, passphrase를 설정했다면 입력하고 엔터를 눌러야 접속할 수 있습니다.
몇 가지 간단한 서버 명령어를 알려드리자면, 먼저 새로운 사용자를 생성하려면 ‘adduser 사용자명‘을 입력하면 됩니다. 이 사용자의 비밀번호를 생성 및 변경하려면 ‘passwd 사용자명’을 입력하여 비밀번호 입력 과정을 진행하면 됩니다. ‘ls’를 입력하면 현재 위치한 디렉토리에 무엇이 있는지 볼 수 있고, ‘ls -a’를 입력하게 되면 숨겨진 경로까지 확인할 수 있습니다. ‘cd 폴더명’을 입력하면 해당 디렉토리로 이동할 수 있고, 폴더명이 들어갈 위치에 ‘..’을 입력하면 상위 디렉토리로 이동합니다.
주의사항
개인 키(pem파일)를 잃어버리거나 손상시키게 되면 기본적으로 복구가 불가능합니다. 때문에 개인 키는 반드시 안전한 곳에 백업하거나 보관해놓아야 합니다. 또한 개인 키 파일이 위치한 파일 경로가 서버 상에서 인식하고 있는 경로와 다를 경우 서버가 개인 키 파일을 찾지 못합니다. 때문에 수동으로 경로를 생성하거나 직접 새로운 경로를 입력해서 접속해야 합니다. 이 경우에는 ‘ssh –i (파일경로) (서버 아이디)@(ip주소)’를 입력하시면 됩니다.
만약 키 페어를 다른 걸로 변경하고 싶다면 어떻게 해야 할까요? 단순합니다. 지금까지의 과정을 한 번 더 거치면 됩니다. 그럼 서버에서 공개 키 정보를 덮어쓰기 때문에 이전의 정보가 지워지고, 더 이상 이전의 키 페어는 사용할 수가 없게 될 것입니다.
지금까지 SSH에 대한 정의와 필요성에서부터 시작하여, 작동원리와 실제 적용하는 방법까지 모두 알아보았습니다. SSH는 현재까지도 서버를 원격으로 접속하기 위한 가장 보편적이고 강력한 보안 방식으로 사용되고 있으며, 사용자 계정의 비밀번호 입력과정을 넘어가고 바로 접속할 수 있기 때문에 편리한 점도 있습니다. 또한 위와 같은 방식으로 누구나 쉽게 SSH를 서버에 적용할 수 있으니, 서버를 사용하실 때 꼭 참고하시길 바랍니다.
[SSH 시리즈 보기]
SSH 명칭부터 접속까지 한 번에 이해하기 1
SSH 명칭부터 접속까지 한 번에 이해하기 2 (현재 글)