[출처] http://blog.naver.com/nuevacancion/120098582665

자, 간만에 펭귄의 허접 서버관리 강좌를 이어 가도록 하겠습니다.

올해 처음으로 쓰는 강좌가 되겠군요.

 

CentOS가 보편화되면서 yum이라는 패키지 관리 프로그램으로 대부분 패키지 업데이트를 합니다.

그러나 이 경우 yum의 패키지 업데이트가 느린 경우가 왕왕 있는데, 대표적인 것이 OpenSSH입니다.

 

CentOS 5.2에서 OpenSSH를 yum으로 업데이트하더라도 버전은 다음과 같이 표시가 됩니다.

 

[root@hosting ~]# cat /etc/redhat-release
CentOS release 5.2 (Final)
[root@hosting ~]# ssh -V
OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

 

 

현재 OpenSSH는 버전 5.3까지 나와 있는데, yum으로 업데이트하면 꼴랑 4.3p2만 깔립니다.

OpenSSH는 서버 접속과 직결되는 부분이라, 최신 버전이 나오면 바로바로 업데이트해주어야 합니다.

 

이 글에서는 Openssh 최신 버전인 5.3을 컴파일하여 설치하는 법을 다루겠습니다.

 

1. 소스 다운받기

 

먼저, 다음의 명령들을 순차적으로 수행합니다.

 

[root@klsi root]# cd /usr/local/src
[root@klsi src]# wget ftp://ftp.kaist.ac.kr/pub/OpenBSD/OpenSSH/portable/openssh-5.3p1.tar.gz
--03:34:37--  ftp://ftp.kaist.ac.kr/pub/OpenBSD/OpenSSH/portable/openssh-5.3p1.tar.gz
           => `openssh-5.3p1.tar.gz'
Resolving ftp.kaist.ac.kr... 완료.
Connecting to ftp.kaist.ac.kr[143.248.234.110]:21... connected.
anonymous로서 로그인하고 있습니다...로그인 했습니다!
==> SYST ... 완료.    ==> PWD ... 완료.
==> TYPE I ... 완료.  ==> CWD /pub/OpenBSD/OpenSSH/portable ... 완료.
==> PORT ... 완료.    ==> RETR openssh-5.3p1.tar.gz ... 완료.
길이: 1,027,130 (unauthoritative)

100%[=================================================================================================================>] 1,027,130      4.69M/s    ETA 00:00

03:34:37 (4.69 MB/s) - `openssh-5.3p1.tar.gz'가 보존되었습니다 [1027130]

 

소스 파일을 받았으면 다음 명령으로 압축을 풉니다.

 

[root@klsi src]# tar xzvfp openssh-5.3.p1.tar.gz

 

2. telnet 잠시 열어놓기

 

만약에 OpenSSH 업그레이드 도중에 SSH 접속이 끊기거나 하면 IDC에 방문해야 하는 극악한 경우가 생길 수 있습니다.

이 경우를 대비하여 telnet을 잠시 열어 놓습니다.

CentOS의 경우에는 다음과 같이 설정합니다.

 

[root@hosting ~]# vi /etc/xinetd.d/krb5-telnet

service telnet 앞 부분에 #로 주석이 되어 있으면 주석을 해제합니다.
disable = yes로 되어 있으면 no로 수정합니다.

 

저장한 후, /etc/rc.d/init.d/xinetd reload [엔터] 후 /etc/rc.d/init.d/xinetd restart [엔터]를 순서대로 수행합니다.

netstat -nlp 명령으로 23번 포트가 열려져 있는 것을 확인합니다.

 

만약 iptable rule로 23번 포트 접속을 막아 놓은 경우에는 23번 포트 접속이 가능하도록 룰을 추가하여 줍니다.

RedHat 9의 경우에는 /etc/xinetd.d/telnet 파일을 열어 편집해 줍니다. 설정 변경 방법은 CentOS와 같습니다.

여기까지 성공했으면 telnet으로 서버에 접속한 뒤 su - 명령으로 수퍼유저로 전환합니다.

 

3. 기존의 패키지 제거

 

/etc/rc.d/init.d/sshd stop 명령으로 SSH 데몬을 정지한 후

rpm -qa | grep ssh 명령으로 기존 패키지를 확인한 후 제거합니다.

제거하는 방법은 rpm -e openssh-server [엔터] -> rpm -e openssh-client [엔터] -> rpm -e openssh [엔터] 순입니다.

 

4. 컴파일하기

 

[root@klsi root]# cd /usr/local/src/openssh-5.3.p1

명령으로 소스 압축을 풀어 놓은 디렉터리로 이동한 후 다음 명령을 수행합니다.

 

단, zlib이 /usr/local/zlib에 설치되어 있다는 것을 가정하며,

zlib을 OpenSSH와 연동하지 않을 경우에는 이 옵션은 생략해도 무방합니다.

 

./configure \
--prefix=/usr/local/openssh \
--sysconfdir=/etc/ssh \
--with-zlib=/usr/local/zlib \
--with-pam \
--with-mantype=man \
--with-md5-passwords

 

configure가 끝나면 make && make install 명령으로 설치를 완료합니다.

 

5. /etc/ssh/sshd_config 환경 설정

 

설치가 되면 /etc/ssh/sshd_config 파일을 에디터로 열어 환경 설정 부분을 수정하여 줍니다.

기본적으로 아래 옵션들은 꼭 수정해 주어야 합니다.

 

Port 22 -> 다른 포트를 사용할 경우에는 변경하며, 주석을 반드시 제거해 줍니다.

Protocol 2 -> SSH1보다는 SSH2가 보안상 강력하므로 반드시 Protocol은 2로 설정합니다.

PermitRootLogin no -> 루트로 직접 접속을 허용하지 않을 경우에는 no로 설정하고, 직접 접속을 허용할 경우에는 yes로 설정합니다.

# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key -> Hostkey 앞의 주석을 제거해 줍니다.

PasswordAuthentication yes -> 패스워드 인증을 허용하는 옵션입니다. 반드시 yes로 설정합니다.
PermitEmptyPasswords no -> 빈 패스워드를 허용하지 말라는 옵션이며 반드시 no로 설정합니다.

 

6. SSH 데몬 자동 실행 스크립트 설정

 

vi /etc/rc.d/init.d/sshd 명령으로 파일을 연 후 다음 내용을 그대로 추가합니다.

 

#!/bin/bash
#
# Init file for OpenSSH server daemon
#
# chkconfig: 2345 55 25
# description: OpenSSH server daemon
#
# processname: sshd
# config: /etc/ssh/ssh_host_key
# config: /etc/ssh/ssh_host_key.pub
# config: /etc/ssh/ssh_random_seed
# config: /etc/ssh/sshd_config
# pidfile: /var/run/sshd.pid

# source function library
. /etc/rc.d/init.d/functions

# pull in sysconfig settings
[ -f /etc/sysconfig/sshd ] && . /etc/sysconfig/sshd

RETVAL=0
prog="sshd"

# Some functions to make the below more readable
KEYGEN=/usr/local/openssh/bin/ssh-keygen
SSHD=/usr/local/openssh/sbin/sshd
RSA1_KEY=/etc/ssh/ssh_host_key
RSA_KEY=/etc/ssh/ssh_host_rsa_key
DSA_KEY=/etc/ssh/ssh_host_dsa_key
PID_FILE=/var/run/sshd.pid

do_rsa1_keygen() {
        if [ ! -s $RSA1_KEY ]; then
                echo -n $"Generating SSH1 RSA host key: "
                if $KEYGEN -q -t rsa1 -f $RSA1_KEY -C '' -N '' >&/dev/null; then
                        chmod 600 $RSA1_KEY
                        chmod 644 $RSA1_KEY.pub
                        success $"RSA1 key generation"
                        echo
                else
                        failure $"RSA1 key generation"
                        echo
                        exit 1
                fi
        fi
}

do_rsa_keygen() {
        if [ ! -s $RSA_KEY ]; then
                echo -n $"Generating SSH2 RSA host key: "
                if $KEYGEN -q -t rsa -f $RSA_KEY -C '' -N '' >&/dev/null; then
                        chmod 600 $RSA_KEY
                        chmod 644 $RSA_KEY.pub
                        success $"RSA key generation"
                        echo
                else
                        failure $"RSA key generation"
                        echo
                        exit 1
                fi
        fi
}

do_dsa_keygen() {
        if [ ! -s $DSA_KEY ]; then
                echo -n $"Generating SSH2 DSA host key: "
                if $KEYGEN -q -t dsa -f $DSA_KEY -C '' -N '' >&/dev/null; then
                        chmod 600 $DSA_KEY
                        chmod 644 $DSA_KEY.pub
                        success $"DSA key generation"
                        echo
                else
                        failure $"DSA key generation"
                        echo
                        exit 1
                fi
        fi
}

do_restart_sanity_check()
{
        $SSHD -t
        RETVAL=$?
        if [ ! "$RETVAL" = 0 ]; then
                failure $"Configuration file or keys are invalid"
                echo
        fi
}

start()
{
        # Create keys if necessary
        do_rsa1_keygen
        do_rsa_keygen
        do_dsa_keygen

        echo -n $"Starting $prog:"
        initlog -c "$SSHD $OPTIONS" && success || failure
        RETVAL=$?
        [ "$RETVAL" = 0 ] && touch /var/lock/subsys/sshd
        echo
}

stop()
{
        echo -n $"Stopping $prog:"
        killproc $SSHD -TERM
        RETVAL=$?
        [ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/sshd
        echo
}

reload()
{
        echo -n $"Reloading $prog:"
        killproc $SSHD -HUP
        RETVAL=$?
        echo
}

case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                stop
                start
                ;;
        reload)
                reload
                ;;
        condrestart)
                if [ -f /var/lock/subsys/sshd ] ; then
                        do_restart_sanity_check
                        if [ "$RETVAL" = 0 ] ; then
                                stop
                                # avoid race
                                sleep 3
                                start
                        fi
                fi
                ;;
        status)
                status $SSHD
                RETVAL=$?
                ;;
        *)
                echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
                RETVAL=1
esac
exit $RETVAL

 

 

저장한 후에는 chmod 700 /etc/rc.d/init.d/sshd [엔터] 한 후 /etc/rc.d/rc.local 파일 맨 마지막 줄에 /etc/rc.d/init.d/sshd start 라는 명령 한 줄을 추가합니다.

 

7. SSH 데몬 구동

 

명령 프롬프트에서 다음의 명령을 입력합니다.

 

[root@klsi root]# /etc/rc.d/init.d/sshd start
sshd를 시작함:                                             [  확인  ]
[root@klsi root]#

netstat -nlp 명령으로 확인하여 22번 포트가 열려 있으면 ssh -V 명령으로 버전을 확인합니다.


[root@klsi root]# ssh -V
OpenSSH_5.3p1, OpenSSL 0.9.7a Feb 19 2003


이렇게 나오면 OpenSSH 업그레이드 작업이 모두 완료됩니다. 

/etc/rc.d/init.d/sshd start
Starting sshd:WARNING initlog is deprecated and will be removed in a future release
#ln -s /usr/local/openssh/bin/* /usr/bin
#ln -s /usr/local/openssh/sbin/* /usr/sbin

신고

+ Recent posts

티스토리 툴바