[ホーム] -> [Aache + PHP + PostgreSQL 実験室]

OpenSSH のインストール

ソースは、OpenSSH のホームページ から入手します。OpenSSH は OpenBSD を中心に開発を進められていて、OpenBSD 以外のプラットフォームの場合、ファイル名のバージョンの後ろに p が付いています。OpenBSD 以外のプラットフォームは、この p 付きのファイルをダウンロードします。

ダウンロードしたら、ソースを展開し、展開したディレクトリに移動します。

> tar xzvf openssh-3.4p1.tar.gz
> cd openssh-3.4p1

次に、configure と言うスクリプトを実行します。デフォルトでは、/usr/local にインストールされます。これを変更したい場合は、--prefix で指定します。設定ファイルを、/etc/ssh の下にまとめたいなら、--sysconfdir で指定します。また、アクセス制御を PAM と併用したいなら --with-pam を指定します。もし、PAM の指定をしないで、パスワードに md5 を使っている場合(最近の Linux は md5 を利用しています)、必ず --with-md5-passwords を指定してください(--with-pam を指定した場合はいらない)。これを忘れると、md5 のパスワードのユーザが、パスワード認証が出来なくなります。

> ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam

次に、make をします。

> make

正常に終了したら、root になって、インストールします。

> su
# make install
# exit

これで終了です。

サーバの起動

root になって、sshd コマンドを実行します。

> su
# sshd

これでデーモンとして実行されますので、必要であれば、rc.local にでも書いておいてください。また、サーバの設定ファイルは、sshd_config というファイルなので、環境に合わせて変更してみてください。変更に必要そうなものだけあげておきます。

# root ユーザがログインできなくなります
PermitRootLogin no
# パスワード認証が出来なくなります
PasswordAuthentication no
# Linux 2.2 系列(およびそれ以下)の場合は no にします
# これを指定しないと、起動時に Privilege 出来ないと文句言われる
Compression no

ユーザの鍵ペアの作成

普通に実行すると(PasswordAuthentication yes - デフォルトの場合)、パスワード認証を使って SSH でログインできます。ログインするには次のようにします。

> ssh localhost

これで、OS のパスワードを使ってログインできます。ただしこれは、パスワードを知っている人は誰でもログインできてしまうので、あまりよくありません。そこで鍵ペアを作成して、鍵を持っている場合のみログインできるようにします。

鍵を作成するには、次のように ssh-keygen コマンドを使います。

> ssh-keygen -t dsa
> mv ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
> chmod 644 ~/.ssh/authorized_keys

これを実行すると、~/.ssh/id_dsa, ~/.ssh/id_dsa.pub という二つのファイルが出来ます。~/.ssh/id_dsa が秘密鍵のファイルで、普段はこのファイルを持ち歩いていてください。そしてログイン先のマシンの ~/.ssh/authorized_keys というファイルに ~/.ssh/id_dsa.pub の中身を入れておきます。

ちなみに、パスワードを5文字以上入力しないと、作成できないので注意してください。

ssh でログインしようとすると、~/.ssh/id_dsa のパスワードを聞いてきて、それを入力するとログインできるようになります。要点は次の通りです。

Windows の SSH クライアントソフトは、DSA タイプの鍵をサポートしていないものも多いです。その場合は RSA v1 タイプの鍵を作成します。

> ssh-keygen -t rsa1
> mv ~/.ssh/identity.pub >> ~/.ssh/authorized_keys
> chmod 644 ~/.ssh/authorized_keys

これを実行すると ~/.ssh/identity, ~/.ssh/identity.pub が出来ます。同じように公開鍵の中身を ~/.ssh/authorized_keys に入れておきます。DSA タイプと、RSA v1 タイプの両方の公開鍵が、~/.ssh/authorized_keys に入っていて問題ありません。

普段持ち歩く秘密鍵(id_dsa, identity)は、絶対他人の手に渡ることのない様にしましょう。また、公開鍵をログイン対象のマシンにコピーするときも、絶対途中で改ざんされることのない様にしましょう(そのマシンに直接フロッピーからコピーするとか)。もし、途中で改ざんされて、他人の公開鍵がコピーされると、その他人がログインできるようになってしまいます。

安全にファイルをコピーしたい場合は、SSH に sftp という ftp ライクなツールと、scp という rcp ライクなツールが入っています。パスワード認証でも、通信路は暗号化されているので、scp id_dsa.pub ログイン先マシン名:.ssh/authorized_keys とすることが出来ます。

この公開鍵の設置作業が終わったら、sshd_configPasswordAuthentication no に設定し、パスワード認証が出来ないようにすることをお勧めします(公開鍵を設置したユーザしかログインできない)。もちろん、Telnet など出来ないようにしておくのですよ。

何回も連続して ssh, scp, sftp を使う場合、毎回パスワードを入力するのが大変な場合、ssh-agent を常駐させて、ssh-add で常駐している ssh-agent にパスワードを登録します。こうしておくと、他の SSH のコマンドを使うと自動的にログインできるようになります。ssh-agent は、実行した結果、コマンドを画面に出力します(環境変数を設定するように)。これを実行しないといけませんが、普通 Shell の eval コマンドと組み合わせて使うことで簡単に行えます。

# agent を常駐させ環境変数を設定
> eval `ssh-agent`
# agent にパスワードを追加
> ssh-add
# www.foo.com に接続(接続先のユーザは現在ログインしてるユーザと同じ)
> ssh www.foo.com
# host.foo.com にユーザ dareka で接続
> ssh dareka@host.foo.com
# ファイルをコピー
> scp secret.txt dareka@host.foo.com:data/
# agent の常駐を解除
> eval `ssh-agent -k`
戻る