한국어

네트워킹

온누리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에서 개발 부분을 책임지고 있는 윤상민이라고 합니다.

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

조회 수 :
20919
등록일 :
2013.09.05
05:15:58 (*.251.139.158)
엮인글 :
http://www.webs.co.kr/index.php?document_srl=24704&act=trackback&key=840
게시글 주소 :
http://www.webs.co.kr/index.php?document_srl=24704
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
93 Linux 시스템 백업과 복원 admin 2012-02-28 52269
92 Linux Date Command Examples to Display and Set System Date Time admin 2013-07-11 52006
91 한국인/국내기업은 얼마나 Linux Kernel에 기여할까? admin 2012-04-29 51410
90 Linux 시스템 백업과 복원 admin 2013-04-04 50044
89 리눅스 부팅시 시작시 프로그램 명령어 실행하기 (Linux Init script) admin 2017-08-30 43443
88 OpenVPN - Getting started How-To admin 2017-09-20 41675
87 useradd Command 리눅스 admin 2017-12-15 39317
86 FREE RADIUS 활용및 응용 admin 2013-02-23 37855
85 iptables rules tcp drop all port except tcp 22 admin 2014-02-26 32607
84 kali linux 해킹 hacking attack DDOS etc tools admin 2015-06-24 31315
83 윈도우 2003 작업 스케줄러 설정 admin 2011-12-16 29835
82 How to install a Debian 9 (Stretch) Minimal Server 데비안 9 설치 admin 2018-06-13 29644
81 ftp 파일전송 여러파일을 한번에 통째로 전송 admin 2011-12-16 26306
80 Which is better, GCC or Clang? admin 2018-06-13 25673
79 [Linux/SSL] 리눅스 서버에 Apache 2 설치 및 SSL 설정하기(mod_ssl, openssl) admin 2012-04-15 24939
78 How to disable IPv6 in Debian , 리눅스 아이피설정 admin 2011-12-16 24733
77 apt-get install linux-image-2.6.26-2-686-bigmem admin 2015-06-27 24546
76 리눅스 tar 압축 백업복원시 소유자 문제해결 admin 2011-12-16 24459
75 리눅스 네트워크 설정 LINUX admin 2011-12-19 23636
74 linux 파티션 디렉토리 용량 확인방법 전체 폴더 크기 사이즈 admin 2012-01-05 23627
73 scp, ssh, rsync등을 사용할때에 SSH 비밀번호 묻는것 피하기 admin 2012-04-15 23608
72 검색 파일리스트 만든 다음 여러파일 한방에 압축하기 admin 2012-02-14 22717
71 seagate HD 시게이트 하드 디스크 A/S 에이에스 기간 조회 및 받는 3가지 방법 admin 2013-12-09 22646
70 WinXP 부팅안되는 현상 NTLDR is missing 메세지 admin 2012-07-12 22306
69 모든 CPU 벤치마크 수치 admin 2011-12-16 22207
68 리눅스 시작시 부팅 시, 프로그램 자동실행 등록하기 admin 2017-08-30 21579
67 리눅스의 막강한 네트워크 필터 iptables admin 2012-04-15 21565
66 리눅스에서 자바(JDK) 설치하기 admin 2013-04-08 21258
65 Event IP 20187 admin 2013-04-08 21251
» 암호 없이 SSH 접속하기 admin 2013-09-05 20919