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 の最新バージョン zlib-1.1.4.tar.gz を入手します。
zlib-1.1.4.tar.gz を展開します。zlib-1.1.4 ディレクトリに展開されます。
% gzip -cd zlib-1.1.4.tar.gz | tar xvf -
zlib-1.1.4 ディレクトリに移ります。
% cd zlib-1.1.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.
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 に追加します。
make します。
% make
テストします。
% 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 ***
インストールします。
% 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 の最新バージョン openssl-0.9.7b.tar.gz を入手します。
openssl-0.9.7b.tar.gz を展開します。
% gzip -cd openssl-0.9.7b.tar.gz | tar xvf -
openssl-0.9.7b ディレクトリに移ります。
% cd openssl-0.9.7b
./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
make します。かなり時間がかかります。
% make
テストします。これもかなり時間がかかります。
% make test
インストールします。
% su password: # make install
prngd の最新バージョン prngd-0.9.27.tar.gz を入手します。
prngd-0.9.27.tar.gz を展開します。zlib-1.1.4 ディレクトリに展開されます。
% gzip -cd prngd-0.9.27.tar.gz | tar xvf -
prngd-0.9.27 ディレクトリに移ります。
% cd prngd-0.9.27
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\"
make します。
% make
インストールします。
% 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
/usr/local/etc/init.d/prngd ファイルのこの部分を
SOCKETDIR=/var/run/opt SOCKET=$SOCKETDIR/prngd-socket
このように変更します。
SOCKETDIR=/var/run SOCKET=$SOCKETDIR/egd-pool
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 移植版の最新版 openssh-3.6.1p1.tar.gz を入手します。
openssh-3.6.1p1.tar.gz を展開します。 openssh-3.6.1p1 ディレクトリに展開されます。
% gzip -cd openssh-3.6.1p1.tar.gz | tar xvf -
./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
make します。
% make
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.
インストールします。
% 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
/usr/local/etc/init.d/opensshd ファイルのこの部分を
prefix=%%openSSHDir%% etcdir=%%configDir%% piddir=%%pidDir%%
このように変更します。
prefix=/usr/local etcdir=/usr/local/etc/ssh piddir=/var/run
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 ディレクトリにインストールされます。