openssh (OpenSSH)

[ 戻る | トップページに戻る ]

概要

openssh とは、Open Source な Secure SHell の実装である。
2.3.0p1 から (?) sftp-server が含まれるようになったらしい。 けど sftp 自体は含まれないのねん...と思ったら 2.5.2 辺りから含まれるよう になったらしい。

URL

http://www.openssh.com/ (Official Site)

インストール環境

Slackware 7.0 (Kernel 2.2.14 + glibc 2.1.2)
Plamo Linux 1.4.4 (Kernel 2.2.12 + libc5)
Plamo Linux 2.0 (Kernel 2.2.12 + glibc 2.1.2)
Plamo Linux 2.2.1 (Kernel 2.2.19 + glibc 2.2)
Solaris 2.5.1
Solaris 2.6
Solaris 8
Digital UNIX 4.0E

必要なもの

zlib, OpenSSL 0.9.5a 以降, GNU make, PAM (Optional), GNOME (Optional), EGD (Solaris/Digital UNIX の場合), Solaris /dev/random (Solaris の場合)

バージョン

1.2.3, 2.2.0p1, 2.3.0p1, 2.5.2p2, 2.9p1, 2.9p2, 3.0p1, 3.0.1p1, 3.1p1, 3.5p1

インストール手順 (Linux の場合 : 〜 2.3.0p1)

$ tar xvfz openssh-1.2.3.tar.gz
$ cd openssh-1.2.3
$ ./configure --without-pam --with-tcp-wrappers
$ make
$ su
# make install
# exit

(補足)

インストール手順 (Linux の場合 : 2.5.2p2 〜)

$ tar xvfz openssh-2.9p1.tar.gz
$ cd openssh-2.9p1
$ ./configure --with-tcp-wrappers --disable-suid-ssh
$ make
$ su
# make install
# exit

インストール後に sshd を起動してみると Protocol 2 が使えない状態になっている らしい。詳しくは Trouble Shooting Record へ Go!

(補足)

インストール手順 (1.2.3 on Digital UNIX の場合)

$ tar xvfz openssh-1.2.3.tar.gz 
$ cd openssh-1.2.3
$ ./configure --without-pam
(snip)
checking location of lastlog file... /var/adm/lastlog
checking for /dev/ptmx... yes
checking for /dev/ptc... no
checking for /dev/urandom... no
configure: error: No random device found, and no EGD random pool specified

おろ? Digital UNIX には /dev/urandom がないのか。 EGD を代わりに使えばいいのか? まずは EGD のインストールを済ませる。 終ったら、configure からやり直し。ところで、EGD randam pool って、具体的に 何を指定すればいいのだ? egd.pl でいいのかなぁ。
$ ./configure --without-pam --with-egd-pool=/usr/local/bin/egd.pl
(snip)
checking location of lastlog file... /var/adm/lastlog
checking for /dev/ptmx... yes
checking for /dev/ptc... no
checking for /dev/urandom... no
checking to convert IPv4 in IPv6-mapped addresses... no (default)
updating cache ./config.cache
creating ./config.status
creating Makefile
creating config.h

これでいいらしい。ではコンパイル。
$ make
gcc -g -O2 -Wall -I/usr/local/ssl/include -DETCDIR=\"/usr/local/etc\" -DSSH_PROGRAM=\"/usr/local/bin/ssh\"
       -DSSH_ASKPASS_DEFAULT=\"/usr/local/libexec/ssh/ssh-askpass\" -DHAVE_CONFIG_H -c bsd-snprintf.c
bsd-snprintf.c: In function `vsnprintf':
bsd-snprintf.c:149: incompatible type for argument 3 of `vsprintf'
bsd-snprintf.c:133: warning: variable `ret' might be clobbered by `longjmp' or `vfork'
bsd-snprintf.c: At top level:
bsd-snprintf.c:52: warning: `caught' defined but not used
*** Exit 1
Stop.

おろ? Digital UNIX には vsnprintf がないのか。ソースを見ると va_list の 扱いが間違っている...。(--; bsd-snprintf.c の 129 行目を以下のように修正。
vsnprintf(str, n, fmt, ap)
        char *str;
        size_t n;
        char *fmt;
        va_list ap;       <--- ap の前の * を削除

では、もう一度 make 。
$  make
gcc -g -O2 -Wall -I/usr/local/ssl/include -DETCDIR=\"/usr/local/etc\" -DSSH_PROGRAM=\"/usr/local/bin/ssh\"
       -DSSH_ASKPASS_DEFAULT=\"/usr/local/libexec/ssh/ssh-askpass\" -DHAVE_CONFIG_H -c packet.c
packet.c: In function `packet_send_debug':
packet.c:668: warning: passing arg 3 of `vsnprintf' discards `const' from pointer target type
packet.c:668: incompatible type for argument 4 of `vsnprintf'
packet.c: In function `packet_disconnect':
packet.c:699: warning: passing arg 3 of `vsnprintf' discards `const' from pointer target type
packet.c:699: incompatible type for argument 4 of `vsnprintf'
*** Exit 1
Stop.

おおう。プロトタイプ宣言も間違っているのかな? ...そうだった。 bsd-snprintf.h を修正する。
int vsnprintf(char *str, size_t n, char *fmt, va_list ap);   <--- ap の前の * を削除

これで make; make install はおっけー。だが...。
$ su
# ssh-keygen -b 1024 -f /usr/local/etc/ssh_host_key -N ''
Couldn't connect to EGD socket "/usr/local/bin/egd.pl": Socket operation on non-socket

あら? egd がうまく動いていないらしい。openssh の INSTALL を読むと...
--with-egd-pool=/some/file allows you to enable Entropy Gathering
Daemon support and to specify a EGD pool socket. You will need to
use this if your Unix does not support the /dev/urandom device (or
similar). The file argument refers to the EGD pool file, not the
                                                         ~~~~~~~
EGD program itself. Please refer to the EGD documentation.
~~~~~~~~~~~~~~~~~~~

わはは。完璧間違ってるじゃん。(^^; どうやら egd の動かし方が全然わかっとらんらしい。
$ /usr/local/bin/egd.pl 
No sockets to read entropy: not very useful.
Try running as:  egd.pl ~/.gnupg/entropy
Terminating.

$ /usr/local/bin/egd.pl ~/.gnupg/entropy
35 sources found
forking into background...
server starting
$ can't create socket /home2/fuka/.gnupg/entropy : ファイル番号が正しくありません \
  at /usr/local/bin/egd.pl line 577.

$ mkdir ~/.gnupg
$ /usr/local/bin/egd.pl ~/.gnupg/entropy
35 sources found
forking into background...
server starting

$ ls -l /usr/local/etc/entropy
srwxrwxrwx   1 root     daemon          0 Apr 21 15:33 entropy=

うーむ、ひょっとして pool ファイルって、このソケットを指定するのかいな? じゃあ、ホームに置くのは変なので...。
$ kill <egd.pl の PID>
$ rm -rf ~/.gnupg
$ su
# /usr/local/bin/egd.pl /usr/local/etc/entropy
# exit

$ cd /usr/local/src/openssh-1.2.3
$ make distclean
$ ./configure --without-pam --with-egd-pool=/usr/local/etc/entropy    <--- 注) これが正しい (?) configure
$ make
$ su
# make install
$ ssh-keygen -b 1024 -f /usr/local/etc/ssh_host_key -N ''
Generating RSA keys:  ........................ooooooO.....ooooooO
Key generation complete.
Your identification has been saved in /usr/local/etc/ssh_host_key.
Your public key has been saved in /usr/local/etc/ssh_host_key.pub.
The key fingerprint is:
1024 d2:a8:38:e9:f7:cc:db:56:a8:69:32:3d:9d:a2:63:ee root@alpha-host

おお、でけた。これでいいらしい。いい加減だね。わしのインストールも。(^^;

インストール手順 (2.2.0p1 on Digital UNIX の場合)

以前のバージョン (1.2.3) から改善され、vsnprintf の修正の必要はなくなっている。

インストール手順 (Solaris の場合)

Digital UNIX の場合と vsnprintf の修正を除き一緒。

(Solaris /dev/random の利用について)
Solaris には /dev/random がないため、今までは EGD を使用していたが、ある日 Net を漁っていたところ Solaris /dev/random なるものを見付けた。ソースのほか、パッケージにもなっているので pkgadd するだけ で /dev/{u}random が利用できるようになる。便利〜。
という訳で、Solaris /dev/random を用いれば Linux と同様の手順で インストールすることができる。

設定方法

man 見てもよく分からん。アーカイブには他にたいした資料も含まれていない (;_;
しようがないので Net で探したところ、 openssh + TTSSH インストールメモというページを見つけた。 ここに詳しく書いてある。すばらしー。

ひとつだけ、ちょっと分かりにくかった所。ssh でログインできる条件。

現在ログインしているホスト
・slogin コマンドがインストールされている
・sshd は動いていなくてもよい
・~/.ssh/identity がある
 (別ホストで作成したものでよいが、パーミッションに注意。chmod 600 すること)

リモートログインしたいホスト
・sshd が動いている
・~/.ssh/authorized_keys がある
 (別ホストで作成したものでよいが、パーミッションに注意。chmod 644 すること)

[ 戻る | トップページに戻る ]