본문 바로가기
운영체제 (LNX,WIN)

SSH 접속 시 공개키를 사용하여 접속하기

by 날으는물고기 2008. 10. 27.

SSH 접속 시 공개키를 사용하여 접속하기

이미지도 함께 보려면 : http://blog.naver.com/choibit/140054432679


리눅스의 OpenSSH는 신뢰성있는 원격 접속을 지원해 준다. SFTP를 사용할 수 있도록 해주며, 암호화 통신을 할 수 있다. 이런 SSH는 더욱 강력한 접속 기능을 가지고 있는데 바로 공개키를 이용한 접속이다.

 

즉 서버에는 공개키가, 클라이언트는 개인키를 가지고 있어야지만 SSH접속을 할 수 있도록 할 수 있다.

 

이 접속을 하기 위해서는 리눅스 서버에 OpenSSH가 설치되어 있어야 한다.

그리고 키생성 및 SFTP접속을 위해서 비트바이즈의 터널레이어를 이용하도록 하겠다.

 

터널레이어는 http://www.bitvise.com에서 최신버전을 다운로드 받을 수 있다.

무료이며, 프리소프트웨어이다.

 

 

1. SSH설정하기

 

서버의 SSH를 설정해보자. yum을 이용하여 openSSH를 설치한 경우나, 리눅스 설치시 설치된 경우,

/etc/ssh 폴더로 ssh설정 파일이 들어가 있다.

컴파일을 통한 설치시 별도 설정파일 저장을 설정한다면, 설정파일이 있는 곳을 확인하면 될 것이다.

 

다른 파일을 건들일 필요는 없다. 설정파일에 sshd_config 파일을 불러 온다.

 

     20 # HostKey for protocol version 1
     21 #HostKey /etc/ssh/ssh_host_key
     22 # HostKeys for protocol version 2
     23 HostKey /etc/ssh/ssh_host_rsa_key
     24 HostKey /etc/ssh/ssh_host_dsa_key

 

23번 24번줄에 # 되어 있는 부분을 삭제해 준다. 공개키로 접속을 허용한다는 이야기다.

 

     43 RSAAuthentication yes
     44 PubkeyAuthentication yes
     45 AuthorizedKeysFile      .ssh/authorized_keys

 

43번, 44번, 45번 줄의 #을 없에준다.

 

RSAAuthentication를 사용하며, PubkeyAuthentication를 사용한다는 뜻이다.

AuthorizedKeysFile는 공개키의 위치를 알려주는 것이다. 각 유저의 .ssh폴더 아래에 authorized_keys라는 파일 이름으로 공개키를 저장한다는 이야기이다.

 

     60 PasswordAuthentication yes

 

60번 줄에는 다음과 같은 설정이 있다. 이 설정은 비밀번호를 이용하여 SSH를 로그인 한다는 이야기이다. 일단 yes로 해놓자. 사실 no로 하여 공개키를 이용한 접속만 허용해야 하나, 설정이 완료된 후 접속이 되는지 안되는지 확인한 후에 설정을 바꾸어 주는것이 좋다. 왜냐하면 잘못 설정한 후 접속이 끊겨 버리면 서버에 직접 가서 설정을 해줘야 하기 때문이다. 꼭 기억하자. 비밀번호를 이용한 접근은 완벽한 보안을 가져올 수 없다. 나중에 꼭 no로 변경하도록 하자.  

 

저장을 하고 빠져나오자.

 

[root@Belief ssh]# service sshd restart

 

sshd를 재시작 해준다.

 

 

2. 공개키, 개인키 만들기

 

이번에는 공개키와 개인키를 만들어 보자. 키 매니저로 서버에서 만들 수 있지만,편리하게 Tunnelier 를 이용하여 설정해 보자.

이것을 이용하여 SFTP를 연결해 사용할 수도 있다.

 

http://www.bitvise.com/download-area에 가서 Tunnelier installer를 다운받은 후 설치한다.

 

설치가 완료되면 Tunnelier를 실행해 보자. 그 다음 User Keypair manager를 클릭한다.

 

클릭 후 Generate New를 클릭해 보자.

 

뜨는 창에서 Passphrase에 인증서 비밀번호를 설정할 수 있다.

비밀번호를 설정하고 싶으면 입력하면 되고, 설정을 하고 싶지 않으면 그 상태에서 아래의 Generate 버튼을 눌러 설정할 수 있다.

 

당연한 이야기이지만 인증서 비밀번호 설정시 확인 비밀번호도 넣고, 일치해야 키가 생성된다.

 

그럼 아래와 같이 키가 생성된것을 확인할 수 있다. .

 

그럼 생성된 키를 가지고 공개키와 개인키를 생성해 낼 수 있다. Exprot 버튼을 눌러보자.  

 

Exprot public key로 공개키를 저장할 수 있다. 확장자는 .pub로 저장할 수 있으며, 확장자 자체는 큰 문제가 되지 않는다. 리눅스의 경우 OpenSSH 포멧으로 설정을 하면 된다. 또한 SSH2를  직접 설치한 경우라면 SSH2포멧으로 저장을 하면 된다.

 

Exprot private key로 개인키를 저장할 수 있다. 어떠한 포멧이든 상관 없다. Secure CRT를 이용하여 리눅스의 OpenSSH에 접근하고자 한다면 OpenSSH format로 설정하여 저장하면 된다. 이때 확장자는 다르되, 파일 이름은 동일하게 해줘야 한다.

 

그럼 공개키 및 개인키를 생성하였다. 그 다음에는 서버에 공개키를 설정해 보도록 하자.

 

 

3. 서버에 공개키 설정

 

위 sshd_conf 설정에서도 보았듯이,(45 AuthorizedKeysFile      .ssh/authorized_keys 를 이야기 한다.) 각 유저의 홈디랙토리에 .ssh라는 디랙토리를 생성한다.

 

[charmhcs@Belief ~]$ mkdir .ssh

 

그 후 퍼미션을 설정해 줘야 한다. 중요하다. 퍼미션이 맞지 않으면 로그인을 할 수 없게 되어 있다.

 

[charmhcs@Belief ~]$ chmod 755 .ssh

 

그 후 .ssh폴더에 *.pub키를 업로드 한다. 그리고 빈 파일의 authorized_keys 라는 파일을 생성한다.

 

[charmhcs@Belief ~]$touch authorized_keys

[charmhcs@Belief ~]$cat charmhcs.pub >>authorized_keys

 

그 후 퍼미션을 조정해 준다.

 

[charmhcs@Belief ~]$ chmod 644 authorized_keys

 

여기서도 퍼미션이 맞지 않으면 접속을 할 수 없다.

 

여기서 하나의 계정을 여러명의 키로접근할 수도 있다. 계정 홈디랙토리아래  .ssh에 공개키를 업로드한 후

 

[charmhcs@Belief ~]$cat bestvip.pub >>authorized_keys

를 한다면 authorized_keys에는 charmhcs.pub 와 bestvip.pub 정보를 모두 가지게 되며, 두개의 키로 하나의 계정에 접근할 수 있게 된다. 예를들어 한 계정에 여러명의 개발자가 접근하길 원한다면 위에 처럼 설정을 해주면 여러명의 개발자가 접근할 수 있게 된다.

 

 

4. 원격 접속 프로그램 연결

 

그럼 설정이 모두 끝났다. SSH접속 프로그램 SecureCRT같은 프로그램.. 을 이용하여 접속을 해보자.

접속을 하기 위해서 공개키 접속설정을 해줘야 한다. 개인키와 공개키 모두를 등록한 후 접속을 해보자. 그럼 별도의 로그인 작업 없이 키를 통해서 서버에 접속할 수 있다. (이때 공개키에 비밀번호를 걸어 놓았으면, 비밀번호를 입력해 줘야 동작을 한다.)

 

또한 Tunnelier를 이용하여 접속도 가능하다. 키를 생성했기 때문에 별도의 설정과정은 필요하지 않고 키 슬롯에 맞추어 서버 주소(IP)와 계정을 넣어 주면 서버로 접속할 수 있으며, 심플하면서도 강력한 SFTP프로그램을 이용할 수 있다 .(터미널 프로그램도 있지만 솔직히 별로다.)그리고 별도의 설정을 해주면 SFTP to FTP브릿지 모드로도 사용이 가능한 강력한 프로그램이다. (사실 이 기능이 주된 기능 중 하나이다.)

 

각 터미널별의 별도 설정은 아주 쉬우니, 직접 해보도록 하자.

 

 

 

SSH 공개 키를 이용한 접속하기

 

 

SSH는 기본적으로 아이디와 패스워드를 입력하여 접속을 한다. 그렇지만 여러가지 이유로 키를 이용해야 할 때가 있다. 대표적인 예로는 cron을 이용하여 rsync로 백업을 할 때ssh로 터널링을 하는 경우가 많다. 이때 공개키를 사용하지 않는다면 일일이 아이디와 패스워드를 입력해야 한다면 자동백업 자체가 불가능하게 된다.

 

SSH 서버 환경설정(sshd_config 설정)

공개 키를 이용하여 접속하기 위해서 먼저 SSH 서버에서 공개 키 인증에 관련된 옵션을 설정해야 한다. /etc/ssh/sshd_config 파일에서 “PubkeyAuthentication yes” 옵션이 활성화되어 있어야 원격지 시스템의 패스워드를 입력하지 않고 ssh에서 생성한 개인 키의 프레이즈를 사용할 수 있다.

그렇지만 처음에서는 시스템에 공개 키가 존재하지 않기 때문에 접속이 되지 않는다. 접속이 되 

지 않기 때문에 필요한 파일을 업로드 시킬 수 없게 된다. 그러므로 먼저 “PasswordAuthentication yes” 또는 “UsePAM yes”로 설정하여 키를 생성 후 ssh 서버로 공개 키를 복사하여야 한다. ssh 서버에 로그인할 때 공개 키 방식, PAM, 패스워드 방식순으로 설정되어 있어 공개 키 방식에 의한 인증이 실패하면 PAM, 패스워드 방식으로 인증을 처리하게 된다. 공개 키만으로 운영을 한다면 서버 관리자가 사용자루부터 공개 키를 메일이나 또는 파일로 전송받아 직접 등록해 주어야 하기 때문에 관리상 매운 힘들기 때문에 두 개를 동시에 지원하다.

 

[root@soo0e ~]# vi /etc/ssh/sshd_config

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys

PasswordAuthentication yes

ChallengeResponseAuthentication yes

UsePam yes

 

 

로컬 시스템에서의 접소을 위한 키 생성 

SSH 통신에 사용할 한 쌍의 키를 생성해야 하는데 –t 옵션을 이용하여 ssh2 프로토콜을 위한 dsa 또는 rsa 개인키 및 공개 키를 생성한다. 만약 프로토콜 1 dsa 비밀키 및 공개키를 생성하기 위해서는 “-t dsa1”과 같이 생성할 수 있으나 프로토콜 1은 하위 호환성이 필요할 때 생성하도록 하며 프로토콜 2를 사용할 것을 권고한다. “ssh-keygen –t dsa”와 같이 실행을 하였을 때 생성한 한 쌍의 키를 저장할 디렉토리를 지정해야 하는데 그냥 엔터를 입력하면 사용자 홈 디렉토리의 하위 디렉토리 즉 $HOME/.ssh 디렉토리에 id_dsa, id_dsa.pub 파일을 생성한다. 개인키(id_dsa) 및 공개 키(id_dsa.pub)에서 사용할 암호를 입력하여 두 번의 확인 절차를 거치면 키가 생성된다. 테스트를 위해서 가상 터미널에 root 사용자로 로그인을 하여 키를 생성한다.

[root@soo0e ~]# ssh-keygen -t dsa

Generating public/private dsa key pair.

Enter file in which to save the key (/root/.ssh/id_dsa):

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_dsa.

Your public key has been saved in /root/.ssh/id_dsa.pub.

The key fingerprint is:

50:39:16:d4:7a:99:5e:4e:82:09:88:86:9d:fd:d0:c5 root@soo0e

 

파일을 생성한 후 정상적으로 파일이 생성되었는지 확인한다.

[root@soo0e .ssh]# pwd

/root/.ssh

[root@soo0e .ssh]# ls

id_dsa  id_dsa.pub

 

공기 키를 서버의 홈 디렉토리로 복사 

공개 키를 scp sftp 또는 ftp를 이용하여 원격지 서버로 id_dsa.pub 파일을 authorized_key로 변경하여 복사한다.

[root@soo0e .ssh]# mv id_dsa.pub authorized_keys

[root@soo0e .ssh]# ls

authorized_key  id_dsa

 

~./ssh 퍼미션 설정 

 

클라이언트 시스템 

   

퍼미션 

~/.ssh 디렉토리 

700

~/ssh/id_dsa 개인키 파일 

600

 

원격지 서버 시스템 

   

퍼미션 

~/.ssh 디렉토리 

700

~/.ssh/authorized_keys

644 (or 600)

 

공개키를 이용한 접속 

 

[root@soo0e ~]# ssh root@192.168.2.11

Last login: Sun Sep 16 22:17:50 2007 from 192.168.2.12

[root@soo0e ~]#

 

필자는 공개키를 생성할 때 프레이즈 값을 입력하지 않아서 프레이즈 값을 물어보지 않고 바로 접속이 되었다. 만일 프레이즈 값을 입력하였다면 프레이즈 값을 입력해야 접속을 할 수 있다.

 

클라이언트에 있는 개인키를 다른 클라이언트에 복사하여 사용 할 수도 있다. , 키를 하나 생성하면 키를 복사하여 여러 개의 클라이언트에서 함께 사용이 가능하다는 것이다.

 

현관에 자물쇠(서버의 공유키)가 하나 있다면 가족 여럿이 열쇠(클라이언트의 개인키)를 복사하여 공동으로 사용하는것과 같은 이치라고 할 수 있다.

728x90

댓글