강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

SSH(Secure Shell)_시작하기(1)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

SSH(Secure Shell)

목차  SSH가 무엇인가

        왜 SSH 를 사용해야 하는가

        어디서구하나

       설치방법 (OpenSSH, SSH2)
             - OpenSSH 의 설치방법(RPM설치)
             - OpenSSH 의 설치방법(소스설치)
             - SSH2 의 설치방법(소스설치)

       SSH 클라이언트의 기본적인 사용 방법

      참고문헌 또는 URL

SSH가 무엇인가?


버클리 대학에서 개발한 TCP/IP가 전세계를 지배하게 된 이유는 바로 그 '개방성'이라는 특징에 있다. TCP/IP의 개방성은 많은 장점에도 불구하고 보안이라는 취약점을 갖게 된다.
쉽게 설명해서 TCP/IP는 길거리에서 소리치는 것과 같은 방식을 지닌다. 예를 들어서 교실에서 50명의 학생이 있는데, 영희가 철수와 얘기하고 싶은 경우에는 먼저, "철수야!"라고 소리를 지르게 된다. 그 때 철수가 "왜?"라고 반응이 오게 되면 그 둘의 대화가 진행된다. 하지만 대화 역시 소리질러서 이어나갈 수 밖에 없다. 철수를 제외한 다른 48명의 학생들은 "철수야!"라고 부르는 소리를 듣게 되지만, 자신의 이름이 아니기 때문에 대답하지 않는 것이다. 또한 조금만 신경쓰면 둘의 대화를 모두 들을 수가 있게 된다. 대부분의 착한 학생들은 신경쓰지 않지만, 만일 심술궂은 학생이 있다면 이를 일부러 엿듣게 된다. 그러다가 혹시 영희가 철수에게 "철수야, 사랑해. 너 없이는 하루도 살 수 없어."라고 사랑을 고백하게 되면 심술궂은 학생은 그때부터 칠판에, 화장실에, 복도에 낙서를 하고 다니며 놀리게 된다. 그러면 영희와 철수는 모두 마음에 상처를 받고 피해를 입게 된다.

 

바로 앞에서 든 예가 TCP/IP가 작동하는 방식이고 또한 어떤 식으로 피해를 입는지도 나타낸 것이다. 실제로 스니핑이라는 해킹 기법을 사용하면 네트웍을 통해 하는 얘기들을 엿들을 수가 있고 사용자의 ID와 패스워드 역시 쉽게 알아낼 수가 있다. 우리들이 일반적으로 많이 사용하는 telnet과 역시 버클리 대학에서 개발한 r자로 시작하는 많은 원격 유틸리티들도 이와 같이 그냥 TCP/IP를 사용하기 때문에 원격으로 접속해서 우리가 무슨 짓을 하는지 모두 보이게 된다. 만일 우리가 감시당한다면 이는 기분이 나쁠 뿐만 아니라 개인적인 프라이버시의 문제이기도 하다. 그러면 위의 예를 다시 생각해 보자.

 

영희와 철수는 지난 번의 사건 때문에 크게 상처를 받았고 그 후로 교실에서 아예 말을 못하게 되는 실어증까지 걸렸다. 그러나 영원히 말을 안하고 살 수는 없는 법! 그 둘은 드디어 한 가지 방법을 고안해 냈다. 바로 둘만의 밀어를 만들어낸 것이다. 이제는, "철수야!"가 아니라 "철수얌~"이라고 부른 뒤에 "엥?"이라는 대답이 오면 그 다음부터 암호로 얘기하는 것이다. "숭구리당당" "앗사라비아" "니꼴라~스?" "쿤타킨테~"라고 둘은 말하게 되는데, 교실에 있는 48명의 학생들은 심술궂은 학생을 포함해서 아무도 무든 얘기를 주고 받는지 알 길이 없다. 다만, 미리 동일한 프로토콜을 사용하기로 약속한 영희와 철수만이 저 위의 대화가 "사랑해" "나도 그래" "정말이야?" "당근이쥐"라는 뜻임을 알고 있는 것이다. 이 암호를 개발한 뒤부터 영희와 철수는 심술궂은 학생이 엿들을 걱정도, 놀림받을 염려도 없이 마음껏 대화를 할 수 있게 되었다.

 

것이 바로 SSH이다. SSH는 Secure Shell의 약자로 SSH Communication Security Ltd에서 개발한 것인데, 이는 자유롭지 못하기 때문에 OpenBSD 프로젝트에서 완전히 새롭게, 독점 코드를 사용하지 않고 만들어 구현한 것이 바로 OpenSSH이며 OpenSSH는 암호화 기법을 사용해 통신을 하게 되므로 매우 안전하다. OpenSSH는 현재 SSH1과 SSH2를 모두 지원하고 있다. 다만, SSH 전용의 특허등을 피하기 위해 옵션으로 제공되지 못하는 것들이 조금 있다.

 

OpenSSH에서 제공하는 프로그램등으로는 ssh, scp, sftp, sshd, sftp-server 등이 있는데, 대부분의 경우는 ssh, sshd, scp를 사용하게 될 것이다. sshd는 Secure Shell Server로 telnet 서버와 같이 ssh의 요청을 받아들이고 처리하는 역할을 한다. 다른 사람들이 자신의 컴퓨터로 ssh를 통해 로그인할 수 있도록 하려면 이를 사용하면 된다. ssh는 rsh (Remote Shell)이나 telnet 또는 rlogin (Remote Login)과 같은 종류의 프로그램으로 Secure Shell Server가 구동되고 있는 곳에 안전하게 접속할 수 있도록 해준다. scp는 Secure Copy로 rcp (Remote Copy)와 같이 원격 서버로 쉽게 파일들을 복사할 수 있도록 해준다.

 

OpenSSH를 개발하는 OpenBSD에 대한 설명을 안하고 넘어갈 수가 없는데, 아주 간략하게 설명하자면, 유닉스를 처음 Bell 연구소에서 만들었고, 버클리 대학에서는 몇 가지를 수정하고 추가해서 사용하고 판매했는데, 나중에 저작권 문제 때문에 커널 코드부터 새롭게 작성하게 되었고, 이 BSD (Berkeley Software Distribution)에서 386에서 사용할 수 있는 버전이 나왔고 이 것이 FreeBSD와 NetBSD로 대표된다. 1990년대 초, Theo de Raadt은 NetBSD의 SPARC 포팅을 책임지고 있었는데 Theo와 NetBSD 코어팀과의 NetBSD 개발방향에 대한 이견 때문에 Theo는 그 일을 그만두고 OpenBSD를 만들게 되었다. OpenBSD는 보안에 가장 신경을 쓰는 운영체제이며, 그 때문에 현존하는 모든 운영체제 가운데 가장 보안에 강력하다고 평가를 받고 있다. 한 예를 들어, OpenBSD에서는 스웝 파티션까지도 선택적으로 암호화할 수가 있다!
 

왜 SSH 를 사용해야 하는가?

 

인증(Authentication)
사용자와 서버를 인증한다. 사용자는 SSH 서버에 접속할 때 신분을 증명해야 하는데, 전통적인 패스워드 인증 방식과 더불어RSA, DSA등 공개키 방식의 인증 방법도 지원한다. 또한 SSH 클라이언트는 처음 접속한 서버의 키를 저장함으로써 서버가 변경되었을 경우에도 이를 판별할 수 있다.

 

암호화(Encryption)
보통의 다른 서버/클라이언트 방식의 접속과 달리 SSH는 네트워크를 통해 전달되는 데이터를 암호화한다. 그래서 누군가 중간에서데이터를 가로채더라도 내용을 알 수가 없다. 3DES, blowfish 등의 대칭키 방식의 암호화 방식을 제공하고 새로운 암호화기법을 추가할 수 있게 설계되어 있다.

 

무결성(Integrity)
네트워크를 통해 받은 데이터가 변경되지 않았음을 보장한다. 누군가 데이터를 가로채서 다른 정보를 보내는 것을 방지할 수 있다. MAC(Message Authentication Code)을 통해 이를 구현하고 있다.

압축(Compression)

SSH 연결을 통해 보낸 데이터를 압축 할 수 있다. SSH 클라이언트/서버 사이에서 데이터를 보내기 전에 압축하고 이를 암호화해서 전송한다. 데이터를 받는 쪽에서는 복호화(decryption)한 후 압축을 해제함으로써 구현한다

 

이전의 철수와 영희 이야기에서 보았듯이 OpenSSH는 telnet, ftp, rlogin, rsh, rcp를 대체하는 안전하고, 암호화된 네트워크 연결 도구이다. 누군가 여러분이 사용하는 Telnet, Ftp,rsh,rcp등에서 전송되는 글자들(패스워드)을 가로채어 보기를 원하지 않는다면 사용하는것이 좋다 OpenSSH를 사용하는 또 다른 이유는 OpenSSH는 클라이언트 컴퓨터로 DISPLAY 변수를 자동으로 전송한다. 즉, 로컬 컴퓨터에서 X 윈도우 시스템을 실행 중에 ssh 명령을 사용하여 원격 컴퓨터로 로그인한 경우에, 원격 컴퓨터 상에서 X를 사용하는 프로그램을 실행하면 그 프로그램은 로컬 컴퓨터 상에 나타난다. ssh를 통한 모든 데이타는 암호화되며, 트래픽은 압축되어 더 빠른 전송 효율을 얻을수 있다. 또한 기존의 ftp,pop 같은 안전하지 못한 서비스들을 위한 "터널"까지 지원한다.

sshd 서버를 운영하지 않는 서버 관리자는 보안에 전혀 관심이 없는 사람이다.

www.openssh.org의 OpenSSH FAQ에는 아래처럼 말하고있다.

 

­ 강력한 보안 ­ 프라이버시 보호. 모든 통신은 자동으로 그리고 투명하게 암호화된다. ­ 안전한 X11 세션. 원격 서버에 DISPLAY 변수를 자동으로 설정하고 모든 X11 연결을 보안채널을 통해서 포워딩한다. ­ TCP/IP 포트를 양 방향에서 다른 포트로 자유롭게 포워딩할수 있다. ­ rlogin, rsh, rcp등을 완전히 대체한다. ­ 선택적으로 데이터를 압축하여 느린 네트워크 상에서의 속도 향상

­ 서버는 자신의 RSA 키를 가지며 일정 시간마다 자동으로 재 생성한다.
 

어디서구하나?


리눅스에서 사용할수 있는 ssh 는 두가지가 존재한다.

ssh의 원 제작처인 www.ssh.com (핀란드 회사) 와 BSD licence(사실 100% BSD licence는 아니다.)의 www.openssh.org가 그것이다.

나는 openSSH를 사용하며 이 문서도 openSSH를 기준으로 설명할 것이다.

openSSH는 하나의 클라이언트/서버에서 ssh1,ssh2 프로토콜을 모두 지원한다.

 

ssh는 이미 사용하는 리눅스 배포본에 포함되어 있을지도 모른다. 직접 컴파일 하여 사용하고 싶다면 www.openssh.org에서 소스를 받아 설치한다. 그외 ssh를 사용하기 위해 꼭 필요한 openssl 라이브러리는 www.openssl.org에서 구할수 있다.

 

openssh는 OpenBSD, NetBSD, FreeBSD, AIX, HP-UX, IRIX, Linux, NeXT, SCO, SNI/Reliant Unix, Solaris, Digital Unix/Tru64/OSF, MacOS X 등의 다양한 OS를 지원한다.

설치방법 (OpenSSH, SSH2)


OpenSSH 의 설치방법(RPM설치) 아마도 대부분의 리눅스 배보판에 설치되어 있을것이라고 생각한다. rpm -qa|grep ssh 의 명령으로 설치된 openssh 를 찾을수 없다면 아래의 URL 을 방문해보자 http://www.openssh.com/portable.html 원하는 미러를 선택해서 접속해보면 openssh 의 RPM과 SRPM을 다운로드 받을수있다. ftp://na.mirror.garr.it/mirrors/OpenBSD/OpenSSH/portable/rpm/
6가지의 RPM파일 중에서 openssh-clients, openssh, openssh-server 만 설치하면 사용가능하다. 각 파일들을 다운로드 받은후에 (가) rpm -ivh 파일명 을 이용해서 설치하면 된다 만약 SRPM 을 다운받았다면 (나) rpm --rebuild openssh-x.xx.x.src.rpm (다) 또는 (라) rpmbuild --rebuild openssh-x.xx.x.src.rpm 해서 설치하고 /usr/src/redhat/RPMS/i386 안에 가보면 rpm파일들이 있으니 설치하면 된다
 

OpenSSH 의 설치방법(소스설치)


openssh 설치를 위해서는 zlib 와 openssl를 설치 해야 한다.

 

① 최신 버전 다운로드
openssh -  
http://www.openssh.com
openssl –
http://www.openssl.org
zlib –
ftp://ftp.freesoftware.com/pub/infozip/zlib/

② zlib 설치

(마)
#tar xvfz zlib-xxxx.tar.gz
#cd zlib-xxxx
#./configure
#make
#make test
#make install


③ openssl 설치

 

(바)
#tar xvfz openssl-xxxx.tar.gz
#./config
#make
#make test
#make install



 ④ openssh 설치
(사)
#tar xvfz openssh-xxxx.tar.gz
#cd openssh-xxxx
#./configure --prefix=/usr/local/openssh --with-ssl-dir=/usr/local/ssl
#make
#make install
 [실행]
#/usr/local/openssh/sbin/sshd
#cp /usr/local/src/openssh-xxxx/contrib/sshd.pam.generic /etc/pam.d/sshd
[bin]디렉토리 복사
#cp -p /usr/local/openssh/bin/*  /usr/bin/
$ssh-keygen -d.
$HOME/.ssh
$ cat identity.pub >>authorized_keys
$ cat id_dsa.pub >>authorized_keys

 inetd 방식으로 데몬이 서비스 될 수 있도록 /etc/xinetd.d/ 디렉토리에 다음과 같은 파일을 작성한다.

 

(아)  
    # vi /etc/xinetd.d/ssh
  --------------------------------------------------------------------------
     service ssh
    {
       disable = no
       flags = REUSE
       socket_type = stream
       wait = no
       user = root
       server = /usr/sbin/sshd
       server_args = -i
       log_on_failure += USERID
    }

inetd 방식으로 앞으로 데몬이 실행될 수 있도록 xinetd를 실행시킴

 

(자)     
    #/etc/rc.d/init.d/xinetd restart


SSH2 의 설치방법(소스설치)

1 .  SSH2 설치 전에리눅스 배포판을 everithing으로 설치를 했다면 openSSH가 설치 되어 있어서 SSH2를 설치 하기 전에 먼저 rpm 파일로 설치된openSSH를 제거해 줘야 한다 ssh2설치시에 openSSH와 충돌이 일어 나지는 않는데 설치 후 사용할 때 충돌을 일으킬 수 있기 때문에 반드시 깔끔하게 제거해 줘야한다. 자신의 시스템에 openSSH가 설치 되어 있는지 확인하기위해서 아래처럼 해본다
(차) # rpm -qa|grep ssh (카) openssh-clients-3.6.1p2-34 (타) openssh-askpass-gnome-3.6.1p2-34 (파) openssh-3.6.1p2-34 (하) openssh-askpass-3.6.1p2-34 (거) openssh-server-3.6.1p2-34 (너)
(더) # rpm -e `rpm -qa|grep ssh`
위와 같은 방식으로 검색된 모든 패키지를 삭제한다. openssh 패키지를 삭제하면  /etc/ssh 디렉토리가 빈 디렉토리가 아니라서 제거할 수 없다는 에러가 나기 때문에 /etc/ssh를 "rm -rf" 명령으로 삭제를 해 줘야 한다.

2. ssh2 설치SSH2는 http://www.ssh.fi 에서 다운 받을 수 있다.
configure (러) # ./configure  --with-tcp-wrappers (머) # make (버) # make install (서)
SSH2가 설치 완료되면 /etc/ssh2, /usr/local/bin, /usr/local/sbin, /usr/local/man 디렉토리들에 SSH2관련 파일들이 생긴다. ssh2가 설치 됨과 동시에 ssh2의 명령어들이 포함되어 있는 /usr/local/bin과 /usr/local/sbin이 명령어 PATH에 자동추가 된다.

3. ssh2를 위한 xinetd 설정ssh2를 xinetd로 제어하고 inetd 모드로 작동시키기 위해서는 간단한 작업을 해줘야 된다./etc/xinetd.d 디렉토리에 ssh 라는 이름으로 아래와 같이 작성하자

.EMB00000c6c0869.gif
위와 같이 작성하고 저정했다면 ssh2의 가동을 위해서 xinetd를 재 실행해야 된다.(어)
(저) # /etc/rc.d/init.d/xinetd   restart
그럼 ssh2 서버가 제대로 작동하는지 테스트 해 보기 위해서 다음과 같이 접속을 해 보자.(처)
(커) # ssh   -l   사용자명   localhost    
'-l' 사용자명으로 지정하지 않으면 현재 접속해 있는 사용자로 로그인 시도 한다. ssh2는 기본적으로 root 로 접속할 수있게끔 설정되어 있다.

 

SSH 클라이언트의 기본적인 사용 방법

openSSH 클라이언트는 ssh1,ssh2 프로토콜을 모두 지원하므로, 서버가 지원하는 ssh 프로토콜에 상관없이 접속할수 있다. 예를 들어, 접속할 ssh서버가 ostsc.homelinux.net 이고 계정명이 chaeya 라면 (터)
[rot@tsc13 ~] # ssh -l chaeya ostsc.homelinux.net

또는 (퍼)
[root@tsc13 ~] # ssh chaeya@ostsc.homelinux.net

이제 다음과 같은 메세지와 함께 접속이 진행될 것이다.
The authenticity of host 'ostsc.homelinux.net (210.183.235.13)' can't be established. RSA key fingerprint is 4b:9e:5a:fb:5a:5a:f4:2e:8c:70:69:d3:c8:65:6e:ff.Are you sure you want to continue connecting (yes/no)? yes

위 메세지는 ssh로 해당 서버에 처음 접속할때만 나오는 메세지이며, 접속할 서버의 호스트 키가 ~/.ssh/known_hosts (ssh2의 경우 known_hosts2) 파일에 저장된다. yes로 대답해주면, 다음과 같이 계정 암호를 물어오고, 이제 텔넷과 동일한 작업을 할수 있다. (허)
Warning: Permanently added 'ostsc.homelinux.net,210.183.235.13' (RSA) to the list of known hosts.chaeya@ostsc.homelinux.net's password:

참고문헌 또는 URL

http://www.ssh.com/

http://openssh.com/


『SSH, The Secure Shell: The Definitive Guide』
Daniel J. Barrett &Richard E. Silverman, O'REILLY

http://network.hanbitbook.co.kr/view.php?bi_id=547

http://www.faqs.org/faqs/computer-security/ssh-faq/


http://www.openssh.com/faq.html


http://www.onsight.com/faq/ssh/ssh-faq.html


/_Data/Linux_old/linux/rootman/page01.htm
 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,157 명
  • 현재 강좌수 :  36,515 개
  • 현재 접속자 :  206 명