한국어

네트워킹

온누리070 플레이스토어 다운로드
    acrobits softphone
     온누리 070 카카오 프러스 친구추가온누리 070 카카오 프러스 친구추가친추
     카카오톡 채팅 상담 카카오톡 채팅 상담카톡
    
     라인상담
     라인으로 공유

     페북공유

   ◎위챗 : speedseoul


  
     PAYPAL
     
     PRICE
     

pixel.gif

    before pay call 0088 from app


http://devblog.croquis.com/ko/2012/06/18/1-ssh-without-password.html


이번 글에서는 SSH 서버에 암호 입력 없이 접속하는 방법에 대해서 설명하겠습니다. 정확히 얘기하자면 암호 대신 열쇠를 이용해서 접속하는 방법이 되겠습니다. 암호를 입력하지 않는다고 해서 보안에 허술하다는 뜻은 아닙니다.

원리

제가 처음 유닉스를 접했을 당시에는 서버에 접속하려면 주로 Telnet을 사용했었습니다. 그때의 인식이 이어져 내려와 암호 없이 서버에 접속하는 것이 어색하게 느껴지긴 했으나, 사실 열쇠를 이용하는 것이 여러모로 편리하고 좋습니다.

두가지는 어떤 차이점이 있을까요?

암호의 경우 각 서버가 가지고 있는 것입니다. 따라서 어떠한 클라이언트에서라도 암호만 알고 있으면 서버에 접속할 수 있습니다. 외우기 위해서는 암호가 어느 정도 이상 어려워지기 힘들기 때문에, 아무리 암호가 잘 암호화되어 서버에 저장되었어도, 암호 DB가 유출되면 풀릴 가능성이 높습니다. 같은 암호를 쓴 다른 서버가 있다면 다른 서버도 덩달아 위험해지겠죠. 그리고 여러 사람이 같은 계정을 공유해야 하는 경우 암호를 한번 바꾸는 것도 쉽지 않습니다.

반면에 열쇠는 클라이언트와 서버가 나눠서 가지고 있고, 나누어진 열쇠가 맞아야지만 온전한 열쇠가 됩니다. 이 때 클라이언트가 가진 키를 개인 열쇠(private key), 서버가 가진 열쇠를 공공 열쇠(public key)라고 합니다. 서버에 공공 열쇠가 등록되어야지만 접속이 가능하기 때문에 장소를 가리지 않고 접속해야 하는 경우에는 사용하기 어렵지만, 서버에서 공공 열쇠가 유출되어도 개인 열쇠를 거의 알 수 없기 때문에 (다른 열쇠를 알기 어렵다는 것이 개인/공공 열쇠 방식의 핵심입니다) 다른 서버에 영향이 가지 않습니다. 또 한 계정에 등록할 수 있는 공공 열쇠에 제한이 없기 때문에, 여러 사람이 각자 가진 개인 열쇠들로 계정을 공유할 수 있습니다. 대신 개인 열쇠가 유출되면 문제가 생기지만 (개인 열쇠는 아무렇게나 복사해서 쓰면 안 되고 클라이언트별로 다른 열쇠를 만들어야 합니다), 열쇠를 적절히 제한해서 서버에 등록해뒀다면 영향이 최소화 될 순 있습니다. 또 개인 열쇠에 암호를 걸 수도 있습니다. 이 경우 유출되어도 비교적 안심할 수 있겠죠.

두가지 방식의 특징에 대한 논의는 많이 존재하므로 궁금하신 분은 인터넷에서 쉽게 정보를 얻으실 수 있습니다.

열쇠를 이용할 경우 자동화가 쉬워진다는 추가 장점이 있습니다. 많은 서버/클라이언트 프로토콜(Git등)이 SSH을 통하기 때문에 SSH 인증만 자동으로 된다면 많은 일들이 자동화가 됩니다. 그런데 암호를 이용한 SSH 인증 사용시 어딘가에 암호가 평문으로 존재해야 한다는 부담이 생깁니다. 반면 열쇠를 이용한 경우 서버에 자동 접속을 허가하려는 클라이언트의 공공 열쇠를 등록하는 것으로 충분하고, 추가적인 보안 위험은 없습니다.

방법

이제 실제로 암호 없이 SSH 서버에 접속하는 방법을 설명드리겠습니다. 원리를 이해하셨다면 큰 어려움이 없을 겁니다.

개인 열쇠 생성

우선 클라이언트에서 개인 열쇠를 생성합니다.

$ ssh-keygen -t rsa -C "comment to key"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
50:a5:15:0b:4b:b5:2e:2e:fb:97:6d:f8:b1:c0:48:a6 comment to key

-C 뒤에 주는 것은 개인 열쇠에 대한 설명입니다. 보통 간단하게 이메일 형식을 사용합니다. 저의 경우 'sangmin.yoon@컴퓨터명'을 사용합니다.

첫번째로 경로를 입력하게 되어 있습니다. 대부분의 경우 기본값을 그대로 둡니다. (ssh 명령에서 따로 인자를 주지 않으면 저 경로를 참고합니다.)

두번째는 암호구를 입력하는 곳입니다. 우리의 주 목적은 암호없이 서버에 접속하는 것이기 때문에 이 부분은 빈칸으로 둡니다. 여기에 암호구를 넣으면 열쇠를 사용하기 전에 암호구를 확인합니다. 단 이 암호구는 서버로 전송되지 않는 것으로, 암호를 통한 SSH 접속과는 다른 동작을 합니다. 원하는 경우 나중에 'ssh-keygen -p' 명령으로 암호구를 변경할 수 있습니다.

위와 같이 하면 .ssh 디렉토리에 id_rsa와 id_rsa.pub 파일이 생기는데 각각 개인 열쇠와 공공 열쇠입니다. 파일 권한을 살펴보시면 id_rsa 파일이 더 한정된 권한을 갖는 것을 볼 수 있습니다.

$ ls -l
-rw------- 1 user user 1675 Jun 18 16:19 id_rsa
-rw-r--r-- 1 user user  396 Jun 18 16:11 id_rsa.pub

공공 열쇠 등록

자 이제 공공 열쇠를 서버에 등록하면 됩니다.

서버에 접속해서 .ssh/authorized_keys 파일에 id_rsa.pub의 내용을 추가하면 됩니다. 여려 개의 공공 열쇠를 등록할 경우 한줄에 하나씩 넣으면 됩니다. 이 파일은 본인에게만 읽기/쓰기 권한(0600)이 있어야 합니다.

제 서버 설정 예입니다.

$ cat .ssh/authorized_keys 
ssh-rsa AAAA....OXIj sangmin.yoon@iMac
ssh-rsa AAAA....Ew== sangmin.yoon@wiki
ssh-rsa AAAA....xgrT sangmin.yoon@git
$ ls -l .ssh/authorized_keys
-rw------- 1 user user 1585 Jun  8 09:09 .ssh/authorized_keys

접속 확인

다시 클라이언트로 돌아와 SSH 접속을 시도했을 때 암호 없이 접속되었다면 성공한 것입니다.

$ ssh sangmin.yoon@git.croquis.com
Last login: Mon Jun 18 16:09:20 2012 from 192.168.23.7
sangmin.yoon@git:~$ 

<저자에 대해서>

안녕하세요. croquis.com에서 개발 부분을 책임지고 있는 윤상민이라고 합니다.

새로운 컴퓨터 언어를 익히는 것을 좋아하며, 좋은 지식 정보가 널리 공유되어 더 나은 개발 환경이 만들어졌으면 하는 꿈을 가지고 있습니다.

조회 수 :
43724
등록일 :
2013.09.05
05:15:58 (*.251.139.158)
엮인글 :
http://webs.co.kr/index.php?document_srl=24704&act=trackback&key=ab7
게시글 주소 :
http://webs.co.kr/index.php?document_srl=24704
List of Articles
번호 제목 글쓴이 날짜 조회 수
63 Ubuntu 14.04 원격 접속(xrdp) 설정 admin 2014-12-21 141812
62 Remote Desktop Connection from Windows 7/8 to Ubuntu 14.04 admin 2014-12-21 36722
61 Using Windows RDP to Access your Ubuntu Instance admin 2014-12-21 46084
60 Install GUI on Ubuntu Server admin 2014-12-21 35579
59 How to start GUI from command line? admin 2014-12-21 42237
58 Download all files in a directory using WGET admin 2014-12-16 30946
57 문서 편집기 vi vim command 명령어 정리 admin 2014-10-29 39317
56 find 명령 사용 예제들 admin 2014-10-29 30210
55 특정 IP 엑세스 못하게 하는방법 admin 2014-10-29 32855
54 scp 명령어를 이용한 파일 복사 및 전송 admin 2014-10-29 43346
53 [리눅스] 소프트웨어 레이드의 리빌딩 및 리싱킹 속도를 높이는 5가지 방법 admin 2014-10-17 36205
52 /bin/false, /sbin/nologin 의 차이점 admin 2014-10-13 34059
51 리눅스 시스템 유저 추가 명령어 useradd 사용하기 admin 2014-08-09 37478
50 리눅스 시스템 시작시에 자동 실행할 파일 등록하기 admin 2014-03-22 208518
49 linux 에티터 명령어 정리 포그라운드 전환 : ctrl + z 다시 vi 모드로 돌아오려면 fg admin 2014-03-05 142545
48 Linux Memory Management – Virtual Memory and Demand Paging admin 2014-03-03 39050
47 iptables rules tcp drop all port except tcp 22 admin 2014-02-26 89346
46 seagate HD 시게이트 하드 디스크 A/S 에이에스 기간 조회 및 받는 3가지 방법 admin 2013-12-09 43784
45 SSH Without Authentication Using Key Files (CentOS 5.6) admin 2013-11-22 44557
44 Getting started with SSH public key cryptography admin 2013-09-05 164255
» 암호 없이 SSH 접속하기 admin 2013-09-05 43724
42 Linux Date Command Examples to Display and Set System Date Time admin 2013-07-11 112069
41 FreeRADIUS 설치(freeradius-sever-2.1.8) admin 2013-04-19 166513
40 Radius를 이용한 ssh 인증 서버 구축하기 admin 2013-04-19 108856
39 CentOS 5.4에서 RADIUS 서버 설치하기 admin 2013-04-19 157008
38 Event IP 20187 admin 2013-04-08 35589
37 리눅스에서 자바(JDK) 설치하기 admin 2013-04-08 43721
36 리눅스 네트워크 설정 멸령어 Linux admin 2013-04-08 43365
35 [linux]리눅스 버전및 CPU등 환경정보 확인하기 admin 2013-04-08 188415
34 Linux 시스템 백업과 복원 admin 2013-04-04 82579