불량펭귄 2006.11.03 21:01 전체공개

[33호]SSH 로그인시 패스워드 인증과정 없이 로그인 처리하기

▒ 끄적임에 앞서..
본 문서 자료는 본인 최광민에 의해 작성된 것이며자유롭게재배포가 가능하나 상업적 용도로사용 할 수 없습니다. 또한재배포시는 원작성자(본인)의 이름과 자료의 출처를 반드시명시하여야 하며절대 원 작성자(본인)와의 별도 협의 없이 본 문서를바탕으로 한 수정 및 가공등을 통한 재배포 행위는 용납하지않음을 밝힙니다.위사항들의 위반으로 인해 발생되는 모든 법적 책임은배포자에게 있음을 알려 드립니다.
2006. 11. 03. - Linuxer광민 -
수정요청 및 문의메일 :
help@rootchoi.info
오늘은 간단한 ssh 관련 팁을 소개하고자 한다.
가끔 많은 수의 시스템을 관리하다 보면 중복적인 시스템 로그인 과정에서 ID와 Password를 입력하여 로그인 하는 과정이 다소 불편하다고 느낄때가 있다.
물론 이는 ssh 를 사용하지 않고 telnet 서비스를 사용한다면 Linux 시스템에서 기본적으로 제공하고 있는 tcsh 등을 이용한 간단한 스크립트 프로그램을 작성하여 암호 인증없이 로그인 하는것이 가능하다.
하지만 telnet 서비스는 독자들도 알다 시피 스니핑등의 보안취약성이 잠재하는 매우 취약한 서비스로서 최근에는Windows군을제외하고 대부분의 Unix 나 Linux 시스템등에서는 권장하지 않거나 아예 배제 시키는것이 추세이다.
그렇다면 이러한 불편함을 그냥 계속 갖고 ssh 서비스를 이용해야 하는것일까?
대답은 NO 이다.
SSH 서비스는 기본적으로 telnet 서비스와는 달리 주고 받는 데이터를 암호화 하여 전송하기 때문에 상대적으로 스니핑등의 크래킹 행위에 대해서 안전한것으로 알려져 있다.
SSH서비스의 암호화와 복호화 과정에는 RSA 와 DSA 라는 쌍생성 키가 존재하여 데이터를 주고받는 양쪽의 시스템에해당키값들이저장되어 있다가 해당 키값을 요구할때 키값을 제공 하여 확인후 데이터를 복호화 하여 처리하게 되는 것이다.
그렇다면...
해당 키값과 그 키값에 password 값만 들어있다면 로그인 과정이 생략될수도 있지 않을까?
그렇다 SSH에서는 기본적으로 그러한 기능을 제공하고 있다.
그럼 지금부터 로그인 과정없이 ssh 인증을 통과할수 있도록 처리해 보자.
일단은 두대의 시스템이 필요하다.
한대는 로그인 작업을 할 시스템이며 다른 한대는 원격지 서버 즉 로그인 대상 시스템이 되는것이다. (편의상 작업 시스템은 A시스템 원격지 시스템은 B시스템으로 불르겠다.)
우선은 두대의 시스템 모두에서 다음과 같이 ssh 설정파일을 열어 인증관련 지시자를 활성화 시켜주어야 한다.
[root@master ~]# vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
[root@master .ssh]# service sshd restart
[root@cluster1 ~]# vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
[root@cluster .ssh]# service sshd restart
그 다음 로그인 대상 시스템인 원격지 B시스템에 로그인 하여 다음과 같은 커맨드를 실행한다.
[root@cluster1 ~]# ssh-keygen -t rsa
그러면 rsa 키값을 저장할 경로와 이름을 묻게된다.
여기서 그냥 엔터를 치게되면 디폴트 값으로 저장이 되며 관계가 없기 때문에 그냥 엔터를 치도록 하자.
그 다음은 password 를 물을 것이다.
이것은 로그인시 사용할 패스워드를 묻는것인데 여기서 그냥 엔터를 처버리면 되는것이다.
그럼 다음과 같이 아무런 값도 없는 null 값의 키값이 암호와 인증키가 되어 생성되어진다.
[root@cluster1 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
78:87:5e:4b:8e:5c:1c:ec:12:be:ea:2f:0e:58:a1:2e root@cluster1
[root@cluster1 ~]#
이제 해당 인증 키값을 authorized_keys 라는 이름으로 copy할 차례이다.
위에서 보면 /root/.ssh/id_rsa.pub 라는 경로와 이름으로 public key 가 생성된것을 알수 있다.
[root@cluster1 ~]# pwd
/root
[root@cluster1 ~]# cd .ssh/
[root@cluster1 .ssh]# ls
id_rsa id_rsa.pub known_hosts
[root@cluster1 .ssh]#
[root@cluster1 .ssh]# cp -RfpP id_rsa.pub authorized_keys
그다음 다음과 같이 키값의 복사를 위해 vi 등으로 해당 파일을 열어서 해당 내용을 copy 하도록 하자.
[root@cluster1 .ssh]# vi authorized_keys
ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAIEAuXEEbsmiRJDf4qTssziT59oBkTSJ1zD1CJqKH5tQQWSYR/Mdmofe74jVlrsLy1Xi0W9DgQx/AAko0FsiH/Ouc5l/9BVDSrZlFsnc/AqJ0MLl4kHXLW8fLkAyWG9mogbh5e25Z66nM4UCHgOhWalU/vX9mIYeurpVrpIc0UgiV7c=root@cluster1
위에서와 같이 암호화 되어진 public key 값이 보인다 . 이것을 copy 하여 작업 시스템인 A 시스템에 추가해 주면 되는 아주 간단한 작업인 것이다.
이제 작업 시스템인 시스템 A로 돌아가 처음과 같이 동일한 작업을 수행해 준다.
[root@master ~]# pwd
/root
[root@master ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
0b:30:8c:0c:65:7c:f8:37:6a:06:d5:16:d8:77:a0:6f root@master
[root@master ~]#
[root@master ~]#
[root@master ~]#
[root@master ~]# cd .ssh/
[root@master .ssh]# ls
id_rsa id_rsa.pub known_hosts
[root@master .ssh]#
[root@master .ssh]# cp -RfpP id_rsa.pub authorized_keys
그 다음 방금전 copy 한 시스템 B의 키값을 추가하면 끝이나는 것이다.
[root@master ~]# vi /root/.ssh/authorized_keys
ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAIEAx2XbqUColepSsLs7vbVYxJFn0CadJw/MzVcpY6oLxv69CiWDqcRZ1zwGOgj/gvwPwMmHHVMNxacFIrCXU+Q0vkwh1DqRj77PDhVRIq4zM5IFgpJc+5YrcRhwXFxQne5aC/vCIlHm/RXUeCstX5u9UgAkbNoTIt78oV34L/wxwNs=root@master
ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAIEAuXEEbsmiRJDf4qTssziT59oBkTSJ1zD1CJqKH5tQQWSYR/Mdmofe74jVlrsLy1Xi0W9DgQx/AAko0FsiH/Ouc5l/9BVDSrZlFsnc/AqJ0MLl4kHXLW8fLkAyWG9mogbh5e25Z66nM4UCHgOhWalU/vX9mIYeurpVrpIc0UgiV7c=root@cluster1
그리고 다시 시스템 A의 고유 키값을 다시 시스템 B쪽에 동일한 방법으로 추가해 준다.
이런 작업이 끝나고 나면 키값으로 인증을 마칠 환경 구성이 끝난것이다
자 이제 로그인 해보자~
[root@master /]#
[root@master /]#
[root@master /]# ssh root@cluster1
Last login: Fri Nov 3 18:13:18 2006 from 192.168.10.104
[root@cluster1 ~]#
[root@cluster1 ~]#
[root@cluster1 ~]#
보이는것과 같이 아무런 패스워드 인증과정 없이 로그인에 성공한 것이다.
오늘은 리눅스 시스템의 원격 쉘을 수행하는 SSH 서비스의 인증과정을 생략하는 방법에 대해서 알아 보았다.
이 방법은 내부 시스템 혹은 잣은 로그인이 필요한 시스템에만 수행하는것이 좋다.
물론 시스템 내에 인증 키값이 외부로 유출이 되었다고 한다 해도 해당 호스트 명과 인증키의 생성정보가 맞지 않기 때문에 소용이 없다.
하지만 완벽한 보안은 없는것 처럼 아무리 ssh 서비스가 보안에 뛰어나다고 해도 해당 키값이 외부로 유출 되어진다면 그다지 좋은 영향은 없을것으로 생각된다.
그렇기에 이 방법을 사용한 시스템 로그인 환경을 구성할때는 인증키 관리에 부단한 신경을 써야할 것이다.
그럼 오늘은 이만 물러간다~

0

0

댓글0

    댓글 더보기

    삭제 하시겠습니까? 취소 삭제

    로그인 하시겠습니까? 확인 취소

    댓글을 삭제 하시겠습니까? 확인 취소