소 예 공 방

[고군분투기] SSH로 암호 입력하지 않고 로그인하기

길위의행복 2011. 9. 18. 06:10

암호를 입력하지 않고 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 계정으로 로그인 할 것이다.