FreeBSD ハンドブック
Prev | Chapter 14. セキュリティ | Next

# 14.10. OpenSSH

寄稿: Chern Lee.

セキュアシェル (secure shell) はリモートマシンへのセキュアなアクセスに使われる ネットワーク接続ツールのセットです。それは `rlogin`, `rsh`, `rcp`, `telnet` を直接置き換えて使うことができます。 また、他のあらゆる TCP/IP 接続を ssh 経由でセキュアにトンネル/フォワードすることもできます。 ssh はすべてのトラフィックを暗号化し、 盗聴や接続の乗っ取り等のネットワークレベルの攻撃を事実上無効化します。

OpenSSH は OpenBSD プロジェクトによって維持管理されており、SSH v1.2.12 に最新のすべてのバグ修正と更新を適用したものをベースにしています。 OpenSSH クライアントは SSH プロトコル 1 と 2 の両方に互換性があります。 OpenSSH は FreeBSD 4.0 以降ベースシステムに取り込まれています。

## 14.10.1. OpenSSH を使うことの利点

telnet(1) や rlogin(1) を使う場合、一般にデータはネットワークを平文で流れます。 ネットワークをクライアントとサーバの間のどこかで盗聴することで あなたのユーザ/パスワード情報やセション中を流れるデータを盗むことが可能です。 OpenSSH はこれらを予防する為にさまざまな認証と暗号化の方法を提供します。

## 14.10.2. sshd を有効にする

`rc.conf` ファイルに 以下の行を追加してください。

    sshd_enable="YES"

次に起動したときから ssh デーモンが起動します。 もしくは単に `sshd` デーモンを実行しても構いません。

## 14.10.3. SSH クライアント

ssh(1) ユーティリティは rlogin(1) と同様に働きます。

    # ssh user@foobardomain.com
    Host key not found from the list of known hosts.
    Are you sure you want to continue connecting (yes/no)? yes
    Host 'foobardomain.com' added to the list of known hosts.
    user@foobardomain.com's password: *******

ログインは `rlogin` や telnet でセッションを張った時と同様に続きます。 SSH はクライアントが接続した時、 サーバの信頼性の検証のために鍵指紋システム (key fingerprint system) を利用します。 初めての接続の際にのみ、ユーザは 'yes' と入力することを要求されます。 これ以降の login では保存されていた鍵指紋を照合することで検証されます。 SSH クライアントは保存されていた鍵指紋が login しようとした際に送られてきたものと異なっていた場合には警告を表示します。 指紋は `~/.ssh/known_hosts` に保存されます。

## 14.10.4. Secure copy

`scp` コマンドは rcp と同様に働きます。 安全な方法で行っているほかは、ローカルのファイルをリモートマシンへ、 あるいはリモートマシンのファイルをローカルにコピーするのは同じです。

    # scp user@foobardomain.com:/COPYRIGHT COPYRIGHT
    user@foobardomain.com's password:
    COPYRIGHT            100% |*****************************|  4735
    00:00
    #

前回の例でこのホストの指紋がすでに保存されていれば この `scp` を使う時に検証が行なわれます。

## 14.10.5. 設定

システム全体の設定ファイルは、OpenSSH デーモン、 クライアントの両方とも `/etc/ssh` ディレクトリにあります。

`ssh_config` はクライアントの動作設定、 `sshd_config` はデーモンの動作設定を行ないます。

## 14.10.6. ssh-keygen

パスワードの代わりに ssh-keygen(1) を使って ユーザの認証用の RSA 暗号鍵を作ることができます。

    % ssh-keygen
    Initializing random number generator...
    Generating p:  .++ (distance 66)
    Generating q:  ..............................++ (distance 498)
    Computing the keys...
    Key generation complete.
    Enter file in which to save the key (/home/user/.ssh/identity):
    Enter passphrase:
    Enter the same passphrase again:
    Your identification has been saved in /home/user/.ssh/identity.
    ...

ssh-keygen(1) は認証に使う為の公開鍵と秘密鍵のペアを作ります。 秘密鍵は `~/.ssh/identity` に保存され、 公開鍵は `~/.ssh/identity.pub` に保存されます。 公開鍵はリモートマシンの `~/.ssh/authorized_keys` にも置かなければなりません。

これでパスワードの代わり RSA 認証を使って リモートマシンに接続できるようになったはずです。

ssh-keygen(1) でパスフレーズを使っている場合は、 ユーザは秘密鍵を使うために毎回パスフレーズの入力を行なう必要があります。

ssh-agent(1) と ssh-add(1) は 多重にパスワード化された秘密鍵の管理に使われます。

## 14.10.7. SSH トンネリング

OpenSSH は暗号化されたセションの中に他のプロトコルを カプセル化することでトンネルを作ることができます。

以下のコマンドは ssh(1) で telnet 用のトンネルを作成します。

    % ssh -2 -N -f -L 5023:localhost:23 user@foo.bar.com
    %

- -2 は ssh(1) にプロトコル 2 を使うことを指示します。 (古い ssh サーバを使っているときには指定しないでください)

- -N はトンネルだけでコマンドはないことを示します。 省略されると ssh(1) は通常のセッションを開始します。

- -f は ssh(1) にバックグラウンド実行を強制します。

- -L はローカルトンネルとして `localport:localhost:remoteport` 形式を指示します。

- `foo.bar.com` はリモート/ターゲットの SSH サーバです。

SSH のトンネルは指定されたローカルホストとポートを listen する ソケットを作ることで実現されています。 SSH はローカルのホスト/ポートへのすべての接続を SSH 接続経由でリモートマシンの指定されたリモートポートへ 転送 (フォワード) します。

たとえば、ローカルホストのポート `5023` がリモートマシンの `23` に転送されるようになっているとします。 `23` は telnet なのでこれは SSH トンネルを通るセキュアな telnet セッションを作ります。

このようにして smtp や pop3, ftp 等のセキュアではない TCP プロトコルをカプセル化することができます。

典型的な SSH トンネル

    % ssh -2 -N -f -L 5025:localhost:25 user@mailserver.foobar.com
    user@mailserver.foobar.com's password: *****
    % telnet localhost 5025
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 mailserver.foobar.com ESMTP

ssh-keygen(1) と別のユーザアカウントを組み合わせて使うことで より透過的で悩まずに済むような SSH のトンネル環境を作ることができます。 パスワードを入力するところで暗号鍵を使い、 トンネルは別のユーザ権限で実行することが可能です。

## 14.10.8. さらに知りたい人へ

OpenSSH

ssh(1) scp(1) ssh-keygen(1) ssh-agent(1) ssh-add(1)

sshd(8) sftp-server(8)

Prev | Home | Next
IPsec | Up | ストレージ