[고군분투기] SSH로 암호 입력하지 않고 로그인하기
암호를 입력하지 않고 SSH로 서버에 로그인하는 방식은 접속해야 할 서버가 많아서 일일이 암호를 지정하고 기억하는 것이 수월하지 않을 때, 또는 스크립트로 작업을 하는데 사용자가 일일이 암호를 입력해야 하는 상황을 피하고자 할 때 편리하다.
이 글은 클라이언트, 서버 모두 OpenSSH를 사용하는 경우에 대해서 설명하고 있다. 구체적인 예를 들기 위하여 클라이언트와 서버에서 아래와 같은 계정을 가지고 있다고 가정하였다.
클라이언트 컴퓨터에서 사용자 계정
- 사용자 아이디: myid_client
- 홈 디렉토리: /home/myid_client
서버 컴퓨터에서 사용자 계정
- 사용자 아이디: myid_server
- 홈 디렉토리: /home/myid_server
1. 클라이언트, 서버 설정하기
1) 클라이언트 컴퓨터에서 SSH 키 생성하기
클라이언트 컴퓨터의 myid_client 계정에서 ssh-keygen 명령을 실행하면 아래와 같이 키를 저장할 파일 이름과 암호를 지정하라는 프롬프트가 세 번 뜰 것이다. 세 번 모두 그냥 엔터 키를 치면 나중에 로그인시 암호를 요구하지 않는 방식으로 기본 파일 이름을 사용하여 키를 저장한다.
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/myid_client/.ssh/id_rsa):
Created directory '/home/myid_client/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/myid_client/.ssh/id_rsa.
Your public key has been saved in /home/myid_client/.ssh/id_rsa.pub.
myid_client의 홈 디렉토리 아래에 .ssh 디렉토리가 생기고 그 아래에 다음과 같이 두 개의 파일이 생성된다.
id_rsa
id_rsa.pub
id_rsa 파일은 개인 키를 담고 있고, id_rsa.pub 파일은 공개 키를 담고 있다.
2) 서버 컴퓨터에서 ssh-keygen 실행하기
서버 컴퓨터의 myid_server 계정에서 ssh-keygen을 실행한다. 이 과정은 1)번 과정과 동일하다.
$ ssh-keygen
하지만 여기서는 두 개의 키 파일을 사용하기 위해서 ssh-keygen을 실행한 것은 아니고, .ssh 디렉토리를 만들기 위해서이다. ssh-keygen을 사용하지 않고 직접 .ssh 디렉토리를 만들 수도 있는데, 이 때는 아래와 같이 접근 권한을 사용자로 제한해 주어야 한다.
$ chmod 700 .ssh
3) 클라이언트 컴퓨터의 공개 키를 서버 컴퓨터에 복사하기
클라이언트 컴퓨터에서 서버에 myid_server 계정으로 로그인시 서버 컴퓨터의 SSH 데몬은 아래 파일에서 클라이언트 컴퓨터의 공개 키가 저장되어 있는지 확인할 것이다.
/home/myid_server/.ssh/authorized_keys
authorized_keys 파일이 없다면 생성하고 나서 사용자만 접근할 수 있도록 접근 권한을 바꾸어 준다.
$ touch authorized_keys
$ chmod 600 authorized_keys
클라이언트 컴퓨터의 myid_client 계정에서 id_rsa.pub 파일 내용을 복사해서 서버 컴퓨터의 myid_server 계정이 가지고 있는 authorized_keys 파일에 한 줄로 추가한다.
2. 클라이언트 컴퓨터에서 SSH로 로그인하기
$ ssh myid_server@server_addr
암호를 입력하라는 프롬프트가 뜨지 않고 곧바로 서버 컴퓨터의 myid_server 계정으로 로그인 할 것이다.