OpenSSH のインストール (UNIX)

Last modified: Tue Apr 22 18:55:25 2003 +0900 (JST)


 UNIX 用の SSH 実装はいくつかありますが、 OpenSSH を利用する人が増えてきていると思います。最近広く利用されている Linux や FreeBSD といった、フリーな UNIX 互換 OS には標準で OpenSSH が添付されていますので、それを利用すればよいです。 本項では、OpenSSH がインストールされていない OS を利用している人のガイドとなるよう、OpenSSH移植版 である OpenSSH 3.6.1p1 を Solaris 8 x86 にインストールします。

 なお、本項では gcc などの開発環境、gzip などのソフトウェアツールはあらかじめインストールされて、ファイル検索パスが設定されているものとします。これらツールは Solaris 8 パッケージに付属していますので、必要に応じてインストールしておいてください。

必要となるソフトウェア

  OpenSSH 移植版 をインストールするには、次のソフトウェアが必要になります。

 PRNGd はなくても動作しますが、Solaris 8 には /dev/random 擬似乱数生成デバイスが存在しないため、PRNGd の利用が推奨されています。

zlib のインストール

  1. zlib の最新バージョン zlib-1.1.4.tar.gz を入手します。

  2. zlib-1.1.4.tar.gz を展開します。zlib-1.1.4 ディレクトリに展開されます。

    % gzip -cd zlib-1.1.4.tar.gz | tar xvf -
    
  3. zlib-1.1.4 ディレクトリに移ります。

    % cd zlib-1.1.4
  4. ./configure を実行します。ここでは -s オプションをつけて、shared library を構築しています。

    % ./configure -s
    Checking for gcc...
    Checking for shared library support...
    Building shared library libz.so.1.1.4 with gcc.
    Checking for unistd.h... Yes.
    Checking for errno.h...  Yes.
    Checking for mmap support... Yes.
  5. Makefile で次のようになっている部分を、

    CFLAGS=-fPIC -O3 -DHAVE_UNISTD_H -DUSE_MMAP

    次のようにします。

    CFLAGS=-fPIC -O2 -DHAVE_UNISTD_H -DUSE_MMAP -DHAS_vsnprintf -DHAS_snprintf

    つまり、-DHAS_vsnprintf -DHAS_snprintf を CFLAGS に追加します。

  6. make します。

    % make
  7. テストします。

    % make test
    hello world
    uncompress(): hello, hello!
    gzread(): hello, hello!
    gzgets() after gzseek: hello!
    inflate(): hello, hello!
    large_inflate(): OK
    after inflateSync(): hello, hello!
    inflate with dictionary: hello, hello!
                    *** zlib test OK ***
  8. インストールします。

    % su
    password:
    # make install
    cp zlib.h zconf.h /usr/local/include
    chmod 644 /usr/local/include/zlib.h /usr/local/include/zconf.h
    cp libz.so.1.1.4 /usr/local/lib
    cd /usr/local/lib; chmod 755 libz.so.1.1.4
    cd /usr/local/lib; if test -f libz.so.1.1.4; then \
      rm -f libz.so libz.so.1; \
      ln -s libz.so.1.1.4 libz.so; \
      ln -s libz.so.1.1.4 libz.so.1; \
      (ldconfig || true)  >/dev/null 2>&1; \
    fi
    #

OpenSSL のインストール

  1. OpenSSL の最新バージョン openssl-0.9.7b.tar.gz を入手します。

  2. openssl-0.9.7b.tar.gz を展開します。

    % gzip -cd openssl-0.9.7b.tar.gz | tar xvf -
  3. openssl-0.9.7b ディレクトリに移ります。

    % cd openssl-0.9.7b
  4. ./config を実行します。ここでは shared オプションをつけて、shared library を構築しています。また、 --prefix=/usr/local --openssldir=/usr/local/etc/openssl を設定し、OpenSSL ファイル群が /usr/local/bin, /usr/local/lib, /usr/local/include/openssl, /usr/local/etc/openssl にインストールされるようにしています。

    % ./config shared --prefix=/usr/local --openssldir=/usr/local/etc/openssl
  5. make します。かなり時間がかかります。

    % make
  6. テストします。これもかなり時間がかかります。

    % make test
  7. インストールします。

    % su
    password:
    # make install

PRNGD のインストール

  1. prngd の最新バージョン prngd-0.9.27.tar.gz を入手します。

  2. prngd-0.9.27.tar.gz を展開します。zlib-1.1.4 ディレクトリに展開されます。

    % gzip -cd prngd-0.9.27.tar.gz | tar xvf -
  3. prngd-0.9.27 ディレクトリに移ります。

    % cd prngd-0.9.27
  4. Makefile に

    # Solaris 7 or 8 or 9
    # CC=cc
    # CFLAGS=-xO4 -KPIC -DSOLARIS
    # CC=gcc
    # CFLAGS=-O -DSOLARIS
    # SYSLIBS=-lsocket -lnsl

    という部分があります。これを、このように変更します:

    # Solaris 7 or 8 or 9
    # CC=cc
    # CFLAGS=-xO4 -KPIC -DSOLARIS
    CC=gcc
    CFLAGS=-O -DSOLARIS
    SYSLIBS=-lsocket -lnsl

    さらに、この部分を

    # Move default locations
    #DEFS=-DRANDSAVENAME=\"/tmp/prngd-seed\" -DCONFIGFILE=\"/tmp/prngd.conf\"
    # or
    #DEFS=-DRANDSAVENAME=\"/usr/local/etc/prngd/prngd-seed\" -DCONFIGFILE=\"/usr/local/etc/prngd/prngd.conf\"
    

    こうします。

    # Move default locations
    #DEFS=-DRANDSAVENAME=\"/tmp/prngd-seed\" -DCONFIGFILE=\"/tmp/prngd.conf\"
    # or
    DEFS=-DRANDSAVENAME=\"/usr/local/etc/prngd/prngd-seed\" -DCONFIGFILE=\"/usr/local/etc/prngd/prngd.conf\"
    
  5. make します。

    % make
  6. インストールします。

    % su
    password:
    # mkdir -p /usr/local/sbin /usr/local/etc/prngd /usr/local/etc/init.d /usr/local/man/man8
    # cp contrib/Solaris-7/prngd.conf.solaris-7 /usr/local/etc/prngd/prngd.conf
    # cp contrib/Solaris-8/prngd /usr/local/etc/init.d/
    # chmod 744 /usr/local/etc/init.d/prngd
    # ln -s /usr/local/etc/init.d/prngd /etc/rc0.d/K10prngd
    # ln -s /usr/local/etc/init.d/prngd /etc/rc1.d/K10prngd
    # ln -s /usr/local/etc/init.d/prngd /etc/rc2.d/S90prngd
    # ln -s /usr/local/etc/init.d/prngd /etc/rcS.d/K10prngd
    # cat /var/adm/messages /var/log/syslog > /usr/local/etc/prngd/prngd-seed
    # cp prngd /usr/local/sbin/
    # cp prngd.man /usr/local/man/man8/prngd.8
  7. /usr/local/etc/init.d/prngd ファイルのこの部分を

    SOCKETDIR=/var/run/opt
    SOCKET=$SOCKETDIR/prngd-socket

    このように変更します。

    SOCKETDIR=/var/run
    SOCKET=$SOCKETDIR/egd-pool
  8. prngd を起動します。

    # sh -x /etc/rc2.d/S20prngd start
    DESC=PRNGD entropy-gathering daemon
    PRNGD=/usr/local/sbin/prngd
    SOCKETDIR=/var/run
    SOCKET=/var/run/egd-pool
    + mkdir -p /var/run 
    COMMAND=/usr/local/sbin/prngd /var/run/egd-pool
    CONCLUSION=started
    + /usr/local/sbin/prngd /var/run/egd-pool 
    + echo PRNGD entropy-gathering daemon started 
    PRNGD entropy-gathering daemon started

OpenSSH 移植版のインストール

  1. OpenSSH 移植版の最新版 openssh-3.6.1p1.tar.gz を入手します。

  2. openssh-3.6.1p1.tar.gz を展開します。 openssh-3.6.1p1 ディレクトリに展開されます。

    % gzip -cd openssh-3.6.1p1.tar.gz | tar xvf -
  3. ./configure を実行します。ここでは --sysconfdir=/usr/local/etc/ssh --with-prngd-socket=/var/run/egd-pool --with-pam オプションを設定し、OpenSSH の設定ファイルを /usr/local/etc/ssh に設置し、prngd のソケットが /var/run/egd-pool に存在し、PAM を利用する、と設定してます。

    実際には、上記のような OpenSSL 0.9.7 + PRNGd のインストールをしている場合、OpenSSL 0.9.7 から PRNGd を認識できるように設定しているため、configure がそれを認識し、--with-prngd-socket オプションは無意味になるようです。

    ./configure --sysconfdir=/usr/local/etc/ssh --with-prngd-socket=/var/run/egd-pool --with-pam
    (中略)
    OpenSSH has been configured with the following options:
                         User binaries: /usr/local/bin
                       System binaries: /usr/local/sbin
                   Configuration files: /usr/local/etc/ssh
                       Askpass program: /usr/local/libexec/ssh-askpass
                          Manual pages: /usr/local/man/manX
                              PID file: /var/run
      Privilege separation chroot path: /var/empty
                sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
                        Manpage format: man
                           PAM support: yes
                    KerberosIV support: no
                     KerberosV support: no
                     Smartcard support: no
                           AFS support: no
                         S/KEY support: no
                  TCP Wrappers support: no
                  MD5 password support: no
           IP address in $DISPLAY hack: no
              Use IPv4 by default hack: no
               Translate v4 in v6 hack: no
                      BSD Auth support: no
                  Random number source: OpenSSL internal ONLY
    
                  Host: i386-pc-solaris2.8
              Compiler: gcc
        Compiler flags: -g -O2 -Wall -Wpointer-arith -Wno-uninitialized
    Preprocessor flags:  -I/usr/local/include
          Linker flags:  -L/usr/local/lib -R/usr/local/lib
             Libraries:  -lpam -ldl -lrt -lz -lsocket -lnsl -lcrypto
    
    PAM is enabled. You may need to install a PAM control file 
    for sshd, otherwise password authentication may fail. 
    Example PAM control files can be found in the contrib/ 
    subdirectory
  4. make します。

    % make
  5. OpenSSH の privilege separation 機能のためのユーザ sshd を作成します。

    # groupadd -g 22 sshd
    UX: groupadd: WARNING: gid 22 is reserved.
    # useradd -c "Secure Shell Daemo" -d /var/empty -g 22 -s /bin/true -u 22 sshd
    UX: useradd: WARNING: uid 22 is reserved.
    
  6. インストールします。

    % su
    password:
    # make install
    # cp contrib/solaris/opensshd.in /usr/local/etc/init.d/opensshd
    # chmod 744 /usr/local/etc/init.d/opensshd
    # ln -s /usr/local/etc/init.d/opensshd /etc/rc0.d/K01opensshd
    # ln -s /usr/local/etc/init.d/opensshd /etc/rc1.d/K01opensshd
    # ln -s /usr/local/etc/init.d/opensshd /etc/rc2.d/S99opensshd
    # ln -s /usr/local/etc/init.d/opensshd /etc/rcS.d/K01opensshd
  7. /usr/local/etc/init.d/opensshd ファイルのこの部分を

    prefix=%%openSSHDir%%
    etcdir=%%configDir%%
    piddir=%%pidDir%%

    このように変更します。

    prefix=/usr/local
    etcdir=/usr/local/etc/ssh
    piddir=/var/run
  8. sshd を起動します。

    # sh -x /etc/rc2.d/S99opensshd start
    + umask 022 
    CAT=/usr/bin/cat
    KILL=/usr/bin/kill
    prefix=/usr/local
    etcdir=/usr/local/etc/ssh
    piddir=/var/run
    SSHD=/usr/local/sbin/sshd
    PIDFILE=/var/run/sshd.pid
    SSH_KEYGEN=/usr/local/bin/ssh-keygen
    HOST_KEY_RSA1=/usr/local/etc/ssh/ssh_host_key
    HOST_KEY_DSA=/usr/local/etc/ssh/ssh_host_dsa_key
    HOST_KEY_RSA=/usr/local/etc/ssh/ssh_host_rsa_key
    + start_service 
    + checkkeys 
    + [ ! -f /usr/local/etc/ssh/ssh_host_key ] 
    + [ ! -f /usr/local/etc/ssh/ssh_host_dsa_key ] 
    + [ ! -f /usr/local/etc/ssh/ssh_host_rsa_key ] 
    + echo starting /usr/local/sbin/sshd... \c 
    starting /usr/local/sbin/sshd... + /usr/local/sbin/sshd 
    sshd_rc=0
    + [ 0 -ne 0 ] 
    + echo done. 
    done.

 クライアント用の ssh コマンド群は /usr/local/bin ディレクトリにインストールされます。


私について