SSH 접속을 시도하면 최초에 로그인 패스워드를 입력해야 합니다. 접속하려는 사용자가 맞는 사용자인지 인증하기 위하여 비밀번호를 입력해야 하는 것은 당연한 일이지만, 이것이 가끔씩은 귀찮게 느껴질 때도 있습니다.
비단 귀차니즘 때문이 아니더라도, 경우에 따라서 패스워드를 생략해야 하는 경우가 있습니다. SSH 프로토콜 위에 얹어져서 동작하는 Git 프로토콜을 사용할 때 패스워드를 중복해서 입력하는 번거로움을 줄일 필요가 있는 경우를 예로 들 수 있습니다.
비밀번호 입력을 생략하고 로그인을 하는 방법으로 공개키 암호화 방식(RSA)을 활용한 인증법을 사용할 수 있는데, 이는 오늘날 우리나라에서 널리 사용되고 있는 공인인증서와 그 동작원리가 유사하다고 할 수 있습니다.
공인인증서를 사용할 때는 비밀번호를 필수적으로 입력해야 하지만, SSH 키 생성기를 활용한 자동 로그인에서는 패스워드를 지정하지 않고 접속하는 즉시 로그인 절차가 자동으로 이루어지게 할 수 있습니다.
물론 패스워드를 입력하지 않고 로그인이 가능해진다는 것은 그만큼 보안상으로 취약해질 수 있기 때문에 개인용도로 사용하는 PC에서만 이 방법을 사용해야 합니다.
실제로는 패스워드 입력 절차를 생략하거나 쉘 접속 콘솔에서 자동으로 패스워드를 입력해 주는 것이 아니라, RSA 암호화를 통해 안전한 방식으로 인증을 하는 것입니다.
RSA는 비대칭 암호화 방식이기 때문에 인증 과정에서 패스워드가 전송되는 일은 없습니다. 단지 외부에 노출되어도 전혀 문제가 없는 공개키(Public Key)만 전송되는 것이기 때문에 보안상 문제가 되지 않습니다.
여기에서 다룰 방법을 응용하면 패스워드를 입력하지 않는 '자동 로그인' 뿐만 아니라, 계정 비밀번호를 그대로 둔 채 SSH 접속 패스워드만 바꾸는 효과를 낼 수도 있습니다. 생성할 RSA 공개키에 패스워드를 설정해서 공개키를 사용할 때 패스워드를 입력하도록 하면 됩니다.
이 방식은 SSH 접속용 패스워드와 계정 패스워드를 서로 다르게 설정함으로써 보안상으로도 더 이득이고, 한 계정에 복수의 RSA 인증키를 사용할 수 있으므로 하나의 계정을 여러 사용자가 공유하여 사용해야 하는 상황에도 유용하게 활용할 수 있습니다.
즉, 계정명은 같고 사용자마다 서로 다른 비밀번호를 사용하여 접속하도록 할 수 있습니다. 서버 관리자 입장에서는 계정의 패스워드를 공개하지 않아도 되기 때문에 보안상으로도 이득이고, 특정 사용자의 접속을 차단하려면 서버에서 해당 사용자의 인증 정보만 지워버리면 되기 때문에 관리도 더욱 용이해집니다.
이 글에서는 Ubuntu 및 Windows Client에서 Ubuntu Server로 SSH 자동 로그인을 구현하는 방법을 다루도록 하겠습니다.
Ubuntu Client에서 SSH 자동 로그인 세팅하기
Local에서 RSA 키 생성
① ~/.ssh 디렉토리로 이동하여 다음 명령을 실행합니다.
(~/.ssh 디렉토리가 없는 경우 mkdir 명령으로 직접 생성합니다.)
ssh-keygen -t rsa -C "[키 명칭(주석)]"
② id_rsa 파일(Private Key) 및 id_rsa.pub 파일(Public Key)이 생성되었는지 확인합니다.
③ id_rsa.pub 파일의 내용을 클립보드에 복사해둡니다.
Remote에서 RSA 키 등록
① SSH 등을 활용하여 Remote Server에 로그인합니다.
(아직은 기존 SSH 비밀번호를 입력해야 합니다.)
② ~/.ssh/authorized_keys 파일을 열고 1-③ 과정에서 복사한 id_rsa.pub 파일 내용을 추가합니다.
(역시 ~/.ssh/authorized_keys 파일이 존재하지 않는 경우 새로 생성해 주도록 합니다.)
※ 여기서, 홈 디렉토리는 권한(chmod)이 755 이하로, .ssh 디렉토리는 700으로, authorized_keys 파일은 600으로 설정되어 있어야 합니다. 그렇지 않은 경우 보안상 Key를 사용한 인증을 건너뛰게 됩니다.
Windows Client에서 SSH 자동 로그인 세팅하기
SSH만 설치되어 있으면 자동 로그인을 구현할 수 있는 Ubuntu와는 달리, Windows 환경에서는 Putty나 Tera Term 등 콘솔 접속 프로그램의 도움을 받아야 RSA 키를 생성할 수 있습니다.
여기서는 Tera Term을 활용하여 RSA 키를 생성하고 SSH 자동 로그인을 구현하는 방법을 설명하겠씁니다.
콘솔 접속 프로그램에서 대개 인증서 관리 기능도 함께 제공하기 때문에, Putty와 같은 여타 콘솔 접속 프로그램에서도 큰 차이가 없을 것입니다.
Local에서 RSA 키 생성
① Tera Term을 실행하고 상단 메뉴의 [Setup] > [SSH KeyGenerator...] 로 들어갑니다.
② Key Generator 창이 뜨면 Key type을 RSA로 설정하고 [Generate] 버튼을 클릭합니다. 약간의 시간이 경과하면 key generated 메시지가 뜨면서 하단 입력창이 활성화됩니다
③ passphrase 부분은 모두 공란으로 두고 Comment에만 키 파일을 쉽게 구분할 수 있도록 주석을 입력합니다. 보통 [사용자]@[도메인] 형식으로 입력하는 것이 일반적입니다.
※ 위에서 설명했듯이, RSA 키에 패스워드를 지정하려면 passphrase에 새로운 패스워드를 입력하면 됩니다. 입력한 패스워드는 RSA 키 파일을 암호화하거나 복호화하는데 사용되며, SSH 로그인시 이 비밀번호를 대신 입력하게 됩니다.
④ 필요한 정보를 모두 입력했으면 하단의 [Save public key] 및 [Save private key] 버튼을 각각 클릭하고, id_rsa.pub 파일(Public Key) 및 id_rsa 파일(Private Key) 파일을 생성하여 [홈 폴더 경로]\.ssh 폴더에 저장합니. (Windows에서 홈 폴더 경로는 C:\Users\[사용자명]입니다.)
⑤ id_rsa.pub 파일을 텍스트 에디터로 열고 내용을 모두 클립보드에 복사해둡니다.
Remote에서 RSA 키 등록
① SSH 등을 활용하여 Remote Server에 로그인합니다.
(아직은 기존 SSH 비밀번호를 입력해야 합니다.)
② ~/.ssh/authorized_keys 파일을 열고 1-⑤ 과정에서 복사한 id_rsa.pub 파일 내용을 추가합니다.
(~/.ssh/authorized_keys 파일이 존재하지 않는 경우 새로 생성해 주면 됩니다.)
Tera Term에 Private Key 위치 등록
이제 비밀번호 없이 SSH에 로그인하기 위한 준비가 끝났습니다. 이제 로그인 과정에서 로컬에 저장된 Private Key의 위치만 지정해 주면 됩니다.
① Tera Term을 실행하고 상단 메뉴의 [Setup] > [SSH Authentication...] 을 클릭합니다.
② Authentication Setup 창이 뜨면 User name에 계정명을 입력하고, 아래쪽에서 'Use RSA/DSA/ECDSA key to log in'을 선택한 뒤, [Private key file:] 버튼을 클릭하여 1-④ 과정에서 저장한 id_rsa파일의 경로를 지정해 줍니다.
③ [OK] 버튼을 클릭하여 인증 설정을 마칩니다.
④ [Setup] > [Save Setup...]을 클릭하여 설정 내용을 Tera Term을 설치한 디렉토리에 덮어씌웁니다.
⑤ Tera Term을 종료하고 다시 실행하면 다음과 같이 인증 창의 설정이 바뀌어 표시됨을 알 수 있습니다. 이 상태에서 Passphrase 란은 비워둔 채 [Enter] 키를 누르면 패스워드 없이 SSH 로그인을 할 수 있습니다.
※ 지금까지 살펴본 과정이 올바르게 진행되기 위해서는 Local 위치에는 Private Key(id_rsa 파일)이 저장되어 있어야 하고, Remote 위치의 Authorized_keys 파일 안에 Public Key(id_rsa.pub 파일)의 내용이 온전하게 저장되어 있어야 합니다. Local에서 Private Key가 손상되거나 Remote에서 Public Key의 내용이 삭제되면 더 이상 자동인증이 되지 않게 됩니다.