はじめに: Ubuntuの仕様変更

Ubuntu 10.04 だったからか、 service コマンドを用いてデーモンなどの起動を行うような変更がありました。そのため、従来の /etc/init.d/ 経由が deprecated 扱いになりました(はず)。また、OS 起動時の自動起動の設定も仕様変更があり、 /etc/init.d/ 配下ではなく、 /etc/init/ 配下の設定ファイルを参照するように変更されました。

これまでであれば、 xinetd を導入した際には、 xinetd 経由で動作させたいデーモンを自動起動しないように設定する必要がありましたが、これらの仕様変更のためにどのように設定を行えば自動起動を解除できるのかがわからなくなっていました。そこらへんを確認して、 xinetd 経由で sshd を起動させるように設定を行いました。

なお、すでにsshdが導入済みという前提で説明します。

xinetdの導入

下記のコマンドを実行します:

kazu634@srv634% sudo aptitude install xinetd

xinetd経由でsshdを起動させる設定

下記のコマンドを実行します。ちなみに、sshのポート番号を 10022 にしています(デフォルトは22)。

kazu634@srv634% sudo vi ssh
kazu634@srv634% cat ssh
service ssh
{
socket_type = stream
protocol = tcp
instances = 3
wait = no
user = root
server = /usr/sbin/sshd
server_args = -i
port = 10022
}

sshdをOS起動時に自動起動させない

Ubuntu 10.04は/etc/init/ 配下の設定ファイルでOS起動時の制御を設定します。具体的には次のように設定します:

kazu634@srv634% sudo cp -p ssh.conf ssh.conf.20101126
kazu634@srv634% sudo vi ssh.conf
kazu634@srv634% diff -u ssh.conf.20101126 ssh.conf                                 /etc/init [6163]
--- ssh.conf.20101126   2010-05-20 02:30:44.000000000 +0900
+++ ssh.conf    2010-11-26 23:51:08.982827977 +0900
@@ -4,7 +4,7 @@
description    "OpenSSH server"
-start on filesystem
+# start on filesystem
stop on runlevel S
expect fork

xinetdの再起動

xinetd を再起動し、設定ファイルを読み込み直します:

kazu634@srv634% sudo service xinetd restart

動作確認として、 ps コマンドを実行してみます:

kazu634@srv634% ps -ef | grep xinetd
root      1088     1   00:15 ?        00:00:00 /usr/sbin/xinetd -pidfile /var/run/xinetd.pid -stayalive -inetd_compat -inetd_ipv6
kazu634   2102  1952   23:42 pts/    00:00:00 grep xinetd

/usr/sbin/sshd と表示された場合、OS起動時に sshd が自動起動しています。リスタートしてみてください。

その他

うまくsshで接続できないときは、 /var/log/auth.log を確認します:

kazu634@srv634% cat auth.log | grep sshd
Nov 27 00:15:12 srv634 sshd[1090]: fatal: Missing privilege separation directory: /var/run/sshd

上記のメッセージが表示されている場合には、/var/run/sshdが存在しないのが原因です。そこで/var/run/sshdを作成します

kazu634@srv634% cd /var/run/
kazu634@srv634% sudo mkdir sshd

上記以外のメッセージの場合には、メッセージに応じた対策を取ってください。