SSH 자동 로그인

SSH로 "서버"에 접속하는 "클라이언트"는 사용자명과 암호를 입력함으로서 그 사용자를 신뢰를 할 수 있다는 증명을 해야 한다. 이 과정을 공개키 암호화 알고리즘을 이용하여 자동화할 수 있다. 공개키 암호화는 암호화하는 키와 복호화하는 키가 서로 다를 수 있는 암호화 방식이다.

공개키와 비밀키는 쌍으로 항상 존재하는데 이것이 큰 의미가 있는 이유는 공개키는 아무에게나 공개를 해도 괜찮다는 것이다. 하지만 공개키로는 암호화만 할 수 있지 비밀키로 암호화된 암호문을 해독하지는 못한다.

클라이언트에서 생성한 공개키/비밀키 쌍 중 공개키만 서버에 전달해두면 서버에서 클라이언트와 서버간에 이 공개키/비밀키 쌍을 검증하여 그 클라이언트가 믿을 만한지 알 수 있다.

다음과 같이 하면 된다 .

클라이언트

클라이언트의 터미널 창에서 하는 작업이다. (osx의 경우 local 터미널) (SSH(Secure Shell)만 설치되어 있으면 자동 로그인을 구현할 수 있는 Ubuntu와는 달리, Windows 환경에서는 Putty나 Tera Term 등 콘솔 접속 프로그램의 도움을 받아야 RSA 키를 생성할 수 있다.)

macOS

1. 로컬 계정으로 접속 한다. 예) openwiki

2. 홈디렉토리에서 ssh-keygen 명령으로 (passphrase 에 암호를 입력하여) 키를 생성한다.

$ ssh-keygen -t rsa<엔터>
Generating public/private rsa key pair.
Enter file in which to save the key (/home/openwiki/.ssh/id_rsa):<엔터>
Enter passphrase (empty for no passphrase): <암호입력>
Enter same passphrase again: <암호입력>
Your identification has been saved in /home/openwiki/.ssh/id_rsa.
Your public key has been saved in /home/openwiki/.ssh/id_rsa.pub.
The key fingerprint is:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX [email protected]

※ 암호는 입력해도 되고, 입력 없이 엔터 치면 인증서에 대한 암호가 필요 없이 접근 된다.

3. /home/openwiki/.ssh 폴더의 파일을 보면 id_rsaid_rsa.pub가 있다. id_rsa 파일은 생성된 비밀키가 저장된 파일이고, id_rsa.pub 파일은 그 비밀키와 쌍을 이루는 공개키이다. 비밀키의 경우 소유권한이 자신만 읽을 수 있도록 되어 있음을 알 수 있다. 이 비밀키는 절대로 외부에 공개되면 안된다.

합계 12

-rw-------  1 openwiki user 951  7월 25 15:03 id_rsa
-rw-r--r--  1 openwiki user 238  7월 25 15:03 id_rsa.pub
-rw-r--r--  1 openwiki user 669  7월 10 11:17 known_hosts

비밀키는 자신의 계정폴더의 .ssh에 그대로 두면 된다.

윈도우

puttygen.exe와 같은 프로그램을 사용해서 키를 만들 수 있다. 홈페이지에서 다운받을 수 있으며, WINSCP를 설치했다면 같이 설치되므로 C:\Program Files (x86)\WinSCP에서 확인해본다.

generate를 누르고 마우스를 좀 움직여주면 생성된다.

공개키 id_rsa.pub 와 비밀키 id_rsa 를 저장한다.

비밀키를 적당한 폴더에 저장하고, putty의 설정에서 connection→ssh→auth 에서 경로를 지정하면 된다.

서버측 작업

이제 이 공개키 파일인 id_rsa.pub를 서버의 사용하고자 하는 계정의 홈페이지 아래 .ssh/authorized_keys 라는 파일로 옮겨 놓으면 된다. 파일을 옮기는 방법은 여러가지가 있겠지만 편한 방법을 쓰면 된다.

1. 서버에 openwiki 아이디로 로그인 한다. (openwiki 뿐 아니라 다른 계정에서도 같은 작업을 하면, 그 계정으로 접근 됨.)

2. /home/openwiki/.ssh/폴더로 접근하여 id_rsa.pub 파일을 업로드 한 후, 파일 authorized_keys에 덧붙인다. 권한을 600으로 변경하거나 확인한다.

cat id_rsa.pub >> authorized_keys<엔터>
chmod 600 authorized_keys<엔터>

.ssh 폴더는 접근이 가능해야 하므로 권한 700 이 적당하다.

확인

클라이언트에서 서버로 openwiki계정을 사용해서 접속하여 확인 한다.

ssh [email protected]
Enter passphrase for key '/home/openwiki/.ssh/id_rsa': <암호 입력후 엔터
  (키 생성시 암호 입력을 안했다면 묻지 않고 바로 접속됨.)>

비밀키가 유출되면 서버가 바로 뚫리므로 주의한다.

잘 안될 때

서버에 공개키를 넣었는데도 SSH 로그인 할 때 마다 비밀번호를 물어본다면, 다음을 확인한다.

권한

우선 .ssh 디렉토리와 authorized_keys 파일의 권한을 확인한다. .ssh는 0700, authorized_keys는 0600으로 설정되어 있어야 한다.

chmod 0700 ~/.ssh
chmod 0600 ~/.ssh/authorized_keys

설정

서버에서 공개키 기반 인증이 허용되어 있어야 한다. /etc/ssh/sshd_config에 설정파일이 있는데 아래의 내용이 활성화되어 있는지 확인한다.

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     %h/.ssh/authorized_keys

주석을 풀고 sshd를 재기동한다.

sudo service sshd restart

참고

연결문서