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_rsa
와 id_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