SSHD(8)

名前
sshd - OpenSSH SSH デーモン

書式
sshd [-deiqtD46] [-b ビット数] [-f 設定ファイル] [-g ログイン猶予時間] [-h ホスト鍵ファイル] [-k 鍵の生成間隔] [-o オプション] [-p ポート番号] [-u 長さ]

説明
sshd (SSH デーモン) は ssh(1) のためのデーモンプログラムです。 これらのプログラムはともに rlogin と rsh を置き換えるもので、 安全でないネットワーク上にある、2つの信頼されていないホスト間で、 暗号化された安全な通信を提供します。これらのプログラムはできるだけ 簡単にインストールして使えるよう配慮されています。

sshd はクライアントからの接続を listen しているデーモンです。通常 これはブート時に /etc/rc から起動され、接続を受けつけるたびに新しいデーモンが fork します。 Fork したデーモンは、鍵の交換、暗号化、認証、コマンド実行、 そしてデータ交換をおこないます。この sshd の実装では、SSH プロトコルバージョン 1 と 2 を同時にサポートしています。 sshd は以下のように動作します:

  SSH プロトコル バージョン 1

各ホストは、そのホストに固有の RSA 鍵 (通常 1024 ビット) をもっています。 これはそれぞれのホストを識別するのに使われます。加えて、デーモンは 起動時にサーバ用 RSA 鍵 (通常 768 ビット) を生成します。 この鍵はふつう使われると 1時間おきに生成し直され、 ディスクに保存されることは決してありません。

クライアントが接続してくると、デーモンはその公開ホスト鍵およびサーバ鍵を 返します。クライアントは自分がもっているデータベースとこの RSA ホスト鍵とを 比較し、それが変更されていないことを確かめます。つぎにクライアントは 256 ビットの乱数を生成します。これをそのホスト鍵とサーバ鍵両方をつかって 暗号化し、暗号化された数値をサーバに送ります。このとき、どちらの側も この数値をセッション鍵として使います。セッション鍵とはこれ以降のすべての 通信を暗号化するのに使われるもので、以後セッションは既存の暗号化 アルゴリズムを使って暗号化されます。これらのアルゴリズムは現在のところ Blowfish または 3DES で、デフォルトでは 3DES となっています。 クライアントはサーバによって提案された暗号化アルゴリズムから 使用するものを選択します。

つぎに、サーバとクライアントは認証のための対話に入ります。クライアントは 自分自身の身分を証明するため、 .rhosts 認証や、RSA ホスト認証と組み合わせた .rhosts 認証、RSA チャレンジ・レスポンス 認証、 あるいはパスワード認証を使おうとします。

Rhosts 認証は根本的に安全でないため、ふつうは禁止されています。しかし 必要とあればサーバの設定ファイルによって許可することもできます。 rshd 、 rlogind 、 および rexecd を止めないかぎり (これは rlogin と rsh を完全に禁止することになりますが)、 システムのセキュリティは改善されません。

  SSH プロトコル バージョン 2

バージョン 2 も同様に動作します: 各ホストは固有のホスト鍵 (RSA または DSA) をもっており、 これでホストを識別します。しかしデーモンが開始した時点には サーバ鍵は生成されません。より進歩したセキュリティは Diffie-Hellman 鍵交換によって得られます。この鍵交換から 共通のセッション鍵が得られます。

これ以降セッションは対称的暗号化アルゴリズムを用いて暗号化されます。 アルゴリズムは、現在のところ 128ビット AES、 Blowfish、 3DES、 CAST128、 Arcfour、192ビット AES あるいは 256ビットAES です。クライアントはサーバが 提案した暗号化アルゴリズムを選びます。 これに加えて、暗号化メッセージ認証コード (hmac-sha1 あるいは hmac-md5) により、 セッションの内容が途中で改竄されてしまうことのないようにします。

プロトコル バージョン 2 では 公開鍵に基づくユーザ認証 (PubkeyAuthentication) と、 クライアントホスト認証 (HostbasedAuthentication)、 これに加えて従来のパスワード認証とチャレンジ・レスポンス認証が 使えます。

  コマンド実行とデータ転送

クライアントが自分自身の証明に成功すると、セッションを準備するための 対話が始まります。このあとクライアントは仮想端末を割り当てたり、 X11 接続を転送したり、TCP/IP 接続を転送したり、あるいは安全な通信路を 経由して認証エージェントの接続を転送したりします。

最後に、クライアントはシェルか、あるいはコマンドの実行のどちらかを 要求します。ここで双方はセッション モードに入ります。このモードでは 両者はいつでもデータを送ることができ、そのデータはサーバ側のシェル またはコマンドと、クライアント側のユーザ端末とでやりとりされます。

ユーザのプログラムが終了し、転送されたすべての X11 接続やその他の接続が 閉じられると、サーバはクライアントにコマンドの終了状態を送り、 両者は終了します。

sshd はコマンドライン オプションか、設定ファイルによって設定することが できます。コマンドラインからのオプションは、 設定ファイルで指定されている値よりも優先されます。

sshd はハングアップシグナル SIGHUP を受け取ると、自分の設定ファイルを読み込みなおします。 これは自分自身を開始したときのパス名 /usr/sbin/sshd を exec することによっておこないます。

コマンドラインオプションには次のようなものがあります:

-b ビット数
    プロトコル バージョン 1 で短期的に使われるサーバ鍵の ビット数を指定します (デフォルトでは 768 ビットです)。

-d  デバッグモードにします。サーバはシステムログに対し、 冗長なデバッグ表示を出力するようになり、バックグラウンドには移行しません。 またサーバは fork せず、1回の接続しか受けつけません。 このオプションはサーバのデバッグのためだけに用意されています。 複数の -d オプションをつけるとデバッグレベルが上がります。 最高は 3 です。

-e  このオプションが指定されると、 sshd は出力を syslog のかわりに標準エラー出力に送ります。

-f 設定ファイル
    設定ファイルの名前を指定します。デフォルトは /etc/ssh/sshd_config になっています。 sshd は設定ファイルがないと起動しません。

-g ログイン猶予時間
    クライアントが自分自身を認証するのにかかる猶予時間を与えます (デフォルトは 120秒)。クライアントがこの時間内にユーザを 認証できなかった場合、サーバは接続を切って終了します。ゼロを 値として与えると猶予は無限になります。

-h ホスト鍵ファイル
    ホスト鍵を読むファイルを指定します。 このオプションは sshd を root 以外で起動するときは必ず指定しなければいけません (ホスト鍵のファイルはふつう root からしか読めないようになっているからです)。 デフォルトでは、プロトコル バージョン 1 用の鍵が /etc/ssh/ssh_host_key であり、プロトコル バージョン 2 用の鍵が /etc/ssh/ssh_host_rsa_key および /etc/ssh/ssh_host_dsa_key です。 異なるバージョンのプロトコルやホスト鍵の方式に対し、 複数のホスト鍵ファイルを指定することも可能です。

-i  sshd が inetd(8) から起動されることを指定します。 sshd はふつう inetd からは起動されません。なぜならこれはクライアントを 受けつける前にサーバ鍵を生成しておく必要があり、これには 数十秒かかるためです。鍵が毎回生成しなおされると、クライアントは 非常に長い間待たされてしまいます。しかし鍵のサイズが 小さければ (たとえば 512 ビットぐらい)、inetd から sshd を使うことも可能でしょう。

-k 鍵の生成間隔
    サーバ鍵がどれくらいの間隔で再生成されるかを指定します (デフォルトでは 3600秒、つまり 1時間ごとになっています)。 こんなに頻繁に鍵を再生成するのは以下のような理由によります。 この鍵はどこにも格納されません。そのため、このようにしておくと たとえマシンがクラックされたり物理的に乗っ取られたりしても、 1時間後には 盗聴した通信を解読して鍵を見つけることは不可能に なります。この値としてゼロを指定すると、 鍵はまったく再生成されなくなります。

-o オプション
    設定ファイルと同じ形式でオプションを与えたいときに使用します。 これはコマンドラインオプションでは指定できないオプションを 指定したいときに便利です。

-p ポート番号
    サーバが接続を受けつける (listen する) ポート番号を指定します (デフォルトは 22 です)。 複数のポートオプションを指定することも可能です。 なお、コマンドラインオプションでポートを指定した場合、 設定ファイルで指定されたポートは無視されます。

-q  静かなモード。 ふつう、 sshd は接続の開始と認証および終了を syslog に残します。 このオプションを指定すると syslog には何も残りません。

-t  テストモード。 設定ファイルや鍵の正当性チェックだけをおこないます。 これは設定ファイル項目を変更した際に、 sshd を安全に更新するのに便利です。

-u 長さ
    このオプションはリモートホスト名を保持させる utmp 構造体のフィールド長を指定するのに使われます。名前解決されたホストがこの len よりも長い場合、ドットで区切られた 10進の数値がかわりに保持されます。 これは非常に長いホスト名をもつホストがこのフィールドをあふれさせても、 一意に識別できるようにするためです。 -u0 を指定すると utmp ファイルにはつねにドットで区切られた 10進値が使われるようになります。 また -u0 は sshd が DNS 要求をおこなわないようにするのにも使うことができます。 ただし設定ファイルや認証メカニズムでこれが必要とされた 場合はこの限りではありません。 DNS を要求する可能性のある認証メカニズムは RhostsAuthentication 、 RhostsRSAAuthentication 、 HostbasedAuthentication および from="pattern-list" オプションを使った鍵ファイルです。 DNS を必要とする設定オプションには、 AllowUsers あるいは DenyUsers. で使われている「USER@HOST」のパターンも含まれますので注意してください。

-D  このオプションが指定されると sshd は切り離し (detach) をおこなわず、デーモンにはなりません。 これは sshd の監視を簡単にします。

-4  sshd が IPv4 アドレスのみを使うよう強制します。

-6  sshd が IPv6 アドレスのみを使うよう強制します。

設定ファイル
sshd は /etc/ssh/sshd_config (あるいはコマンドラインから -f オプションで指定したファイル) から設定を読み込みます。 このファイルの形式と設定項目は sshd_config(5) で説明されています。

ログインの過程
ユーザがログインに成功すると、 sshd は以下のことをおこないます:

1.  ユーザが端末にログインしており、コマンドがとくに指定されていない場合、 (設定ファイルまたは $HOME/.hushlogin -- FILES の項を参照 -- で禁止されていなければ) 前回のログイン時刻と /etc/motd を表示する。

2.  ユーザが端末にログインしている場合、ログイン時刻を記録する。

3.  /etc/nologin をチェックする。これが存在する場合、その内容を表示して終了する (root 以外)。

4.  そのユーザの通常の権限に移行する。

5.  基本的な環境変数を設定する。

6.  $HOME/.ssh/environment が存在していて、ユーザの環境変数を変更することが許されていれば、それを読み込む。 sshd_config(5) の PermitUserEnvironment 設定項目を参照のこと。

7.  ユーザのホームディレクトリに移動する。

8.  $HOME/.ssh/rc が存在する場合、それを実行する。そうでなければ、もし /etc/ssh/sshrc が存在しているなら、それを実行する。 これ以外の場合は xauth を実行する。この “rc” ファイルには、X11 の認証プロトコルとそのクッキーが標準入力から与えられる。

9.  ユーザのシェルまたはコマンドを実行する。

authorized_keys ファイルの形式
$HOME/.ssh/authorized_keys ファイルは、プロトコル バージョン 1 における RSA 認証と プロトコル バージョン 2 における公開鍵認証 (PubkeyAuthentication) で ログインが許されている公開鍵を格納するものです。 別のファイルを使いたい場合は AuthorizedKeysFile で指定できます。

このファイルには各行にひとつの鍵が格納されています (空行や ‘#’ で始まる行はコメントとして無視されます)。 プロトコル バージョン 1 の RSA 鍵では、 空白で区切られた次のようなフィールドが格納されています: オプション、ビット数、指数、モジュロ、鍵のコメント。 プロトコル バージョン 2 で使う公開鍵では次のフィールドが格納されています: オプション、鍵の種類、base64エンコードされた鍵本体、鍵のコメント。 オプションのフィールドはなくてもかまいません。オプションが存在するかどうかは、 この行が数字あるいはピリオドで始まるかどうかによって決定されます (オプションフィールドは決して数字では始まりません)。 プロトコル バージョン 1 では、RSA 鍵はビット数、指数およびモジュロによって 表されます。コメント欄は利用されません (が、鍵を区別するのに役立ちます)。 プロトコル バージョン 2 では、鍵の種類は “ssh-dss” あるいは “ssh-rsa” です。

これらのファイルでは通常 1行が何百バイトもの長さに なっていることに注意してください (これは公開鍵の係数のサイズが大きいためです)。 これを手でタイプする気にはならないでしょう。かわりに identity.pub, id_dsa.pub あるいは id_rsa.pub をコピーして、それを編集してください。

sshd では、プロトコル 1 とプロトコル 2 の両方で、 RSA 鍵の長さが少なくとも 768ビット以上である必要があります。

オプションは (もしあれば) カンマによって区切ることができます。間に スペースを入れてはいけませんが、ダブルクォートの間にはさめばオッケーです。 以下のオプションがサポートされています (これらのキーワードは 大文字小文字を区別しません) :

from="pattern-list"
    このオプションをつけると、公開鍵認証に加えて、クライアントの ホストをチェックできるようになります。 カンマで区切ったリモートホスト名 (canonical name) の パターン列が指定できます ( ‘*’ および ‘’? がワイルドカードとして使えます)。 このリストには「〜でない」という否定 (negation) を入れることもできます。 その場合はパターンの先頭に ‘’! をつけてください。否定つきのパターンにホストの canonical name が マッチした場合、この鍵は許可されません。 このオプションはセキュリティを上げるためにつけられました: 公開鍵認証それ自体は、(鍵を除いて) ネットワークや ネームサーバ、その他ありとあらゆるものを信用しません。 しかし、もし何物かが何らかの方法で鍵を盗むことができれば、 その鍵を使って世界のどこからでもログインできてしまうことになります。 このオプションは、そのような盗まれた鍵を使うことを より困難にします (もしこれを使おうとするなら、鍵のほかに ネームサーバやルータまでも手を入れなくてはならないからです)。

command="command"
    このオプションを使うと、認証にこの鍵が使われたときは必ず ここで指定されたコマンドが実行されるようになります。 ユーザが (訳注: クライアント側で) 指定したコマンドは無視されます。 クライアント側が仮想端末を要求していれば、ここで指定されたコマンドは 仮想端末上で実行されます。そうでなければ端末なしで実行されます。 8-bit クリーンな通信が欲しい場合は、仮想端末を要求してはいけません。 あるいは no-pty オプションを使ってください。 コマンド文字列中に引用符 (") を入れたいときは、 バックスラッシュを前につけてください。 このオプションは、ある公開鍵には特定の操作だけしかさせないように するのに有効です。例として、リモートバックアップだけをさせて、 それ以外な何もさせないような鍵がつくれます。クライアントの TCP/IP や X11 転送は、明示的に禁止されていない限り可能なので注意してください。 このオプションはシェル、コマンドまたはサブシステムの実行に適用されます。

environment="NAME=value"
    認証にこの鍵が使われたとき、環境変数に追加される文字列を指定します。この やりかたで指定した環境変数は、デフォルトの環境変数の値を上書きします。 このオプションは複数指定することも可能です。 環境変数の変更はデフォルトでは禁止されており、これを許可するには PermitUserEnvironment を設定する必要があります。 UseLogin を使っているときは、このオプションは自動的に禁止されます。

no-port-forwarding
    認証にこの鍵が使われたときは TCP/IP 転送が禁止されます。 クライアントがポート転送を要求しても、すべてエラーになります。 これはたとえば command オプションの指定されている接続などで使われます。

no-X11-forwarding
    認証にこの鍵が使われたときは X11 転送が禁止されます。 クライアントが X11 転送を要求しても、すべてエラーになります。

no-agent-forwarding
    認証にこの鍵が使われたときは、認証エージェントの転送が禁止されます。

no-pty
    端末の割り当てを禁止します (仮想端末の割り当てが失敗するようになります)。

permitopen="host:port"
    ローカルな ``ssh -L'' のポート転送先を、指定されたホストの指定されたポートのみに限定します。 IPv6 アドレスの場合は、指定する形式が異なります: host/port permitopen オプションはカンマで区切って複数指定することもできます。 パターンマッチングはおこなわれません。ホスト名にはドメイン名かアドレスを そのまま書く必要があります。

  authorized_keysファイルの例:
1024 33 12121...312314325 ylo@foo.bar

from="*.niksula.hut.fi,!pc.niksula.hut.fi" 1024 35 23...2334 ylo@niksula

command="dump /home",no-pty,no-port-forwarding 1024 33 23...2323 backup.hut.fi

permitopen="10.2.1.55:80",permitopen="10.2.1.56:25" 1024 33 23...2323

ssh_known_hosts ファイルの形式
/etc/ssh/ssh_known_hosts および $HOME/.ssh/known_hosts の各ファイルは今までに知られている ホストの公開鍵をすべて格納しています。システム用の known_hosts ファイル (大域的 known_hosts ファイル) は管理者によって用意され (必須ではありません)、 ユーザ用の known_hosts ファイルは自動的に更新されます。 これは、ユーザがまだ知られていないホストに接続すると、そのホスト鍵が 自動的にユーザ用 known_hosts ファイルに追加されるようになっています。

これら known_hosts ファイルの各行は次のようなフィールドからなっています: ホスト名、ビット数、指数、係数、そしてコメント。 各フィールドはスペースによって区切られています。

ホスト名はカンマで区切られたパターン列です ( ‘*’ および ‘’? はワイルドカードとして使われます)。 各パターンは (クライアントを認証している ときは) 順にそのホストの正式名と比較されるか、あるいは (サーバを 認証しているときは) ユーザが与えた名前と比較されます。 パターンの先頭に ‘’! をつけると「〜でない」という否定 (negation) の意味になります。 否定されたパターンにマッチしたホストは、 たとえその行の他のパターンにマッチしても (その行では) 受けつけられません。

ビット数、指数および係数は RSA ホスト鍵から直接取り込まれます。 たとえばこれらは /etc/ssh/ssh_host_key.pub などから取得されます。オプションのコメント フィールドは行末まで続き、 これは無視されます。

‘#’ で始まる行および空行はコメントとして無視されます。

ホスト間認証をおこなうさい、どれか適切な鍵をもった行がマッチすれば、 認証は受け入れられます。したがって同じ名前が複数の行にあったり、 同一ホストに異なるホスト鍵が書いてあったりしても受けつけられます (が、おすすめはしません)。異なったドメインにあるホスト名の短縮形が ひとつのファイルにまとめられているときは、これは仕方がないでしょう。 また、これらのファイルには矛盾する情報が書かれていることもあり得ます。 その場合は、どれかのファイルに正しい情報が書いてあれば認証は受け入れられます。

注意。これらのファイルの各行は、ふつう何百文字もの長さになっています。 もちろんこんなホスト鍵を手で入力したくはないでしょう。かわりにスクリプトで 生成するか、 /etc/ssh/ssh_host_key.pub をとってきてその先頭にホスト名をつけ加えるかしてください。

  例:

    closenet,...,130.233.208.41 1024 37 159...93 closenet.hut.fi
    cvs.openbsd.org,199.185.137.3 ssh-rsa AAAA1234.....=

関連ファイル

/etc/ssh/sshd_config
    sshd の設定ファイルです。 このファイルの形式と設定項目は sshd_config(5) で説明されています。

/etc/ssh/ssh_host_key, /etc/ssh/ssh_host_dsa_key, /etc/ssh/ssh_host_rsa_key
    これら 3つのファイルはホストの秘密鍵を格納します。 このファイルは root が所有し、root だけが読み込み可能にすべきであり、 これ以外の誰にも読ませてはいけません。 sshd はこのファイルが誰にでも読めるようになっていると 起動しないので注意してください。

/etc/ssh/ssh_host_key.pub, /etc/ssh/ssh_host_dsa_key.pub, /ssh/etc/ssh_host_rsa_key.pub
    これら 3つのファイルはホストの公開鍵を格納します。 このファイルは誰にでも読めるようになっている必要がありますが、 書き込めるのは root だけにしてください。 この内容は秘密鍵のファイルと対応しています。 このファイルが実際に使われることはありません。 これは単にユーザの便宜をはかるためだけに存在し、 ユーザはこれを known_hosts ファイルにコピーする ことができます。これら 2つのファイル (秘密鍵と公開鍵) は ssh-keygen(1) を使って生成することができます。

/etc/moduli
    Diffie-Hellman 鍵交換 (Diffie-Hellman Group Exchange) で使われる、 Diffie-Hellman 群を格納します。 このファイルの形式は moduli(5) で説明されています。

/var/empty
    sshd が特権分離のさいに、認証前の段階で使用する chroot(2) 用のディレクトリです。 このディレクトリはどんなファイルも含んでいてはならず、 所有者は root でグループあるいは他人が書きこめるようになっていてはいけません。

/var/run/sshd.pid
    現在 接続を受けつけている sshd のプロセス ID が入っています (複数の sshd が異なるポートで走っているときは、最後に開始したプロセスの ID が入ります)。 このファイルの内容は機密事項ではなく、誰でも読めるようにしてかまいません。

$HOME/.ssh/authorized_keys
    そのユーザのアカウントでログインするときに使われる公開鍵 (RSA または DSA) の 一覧が入っています。このファイルは root に読めるようになっている必要が あります (つまりそのユーザのホームディレクトリが別ホストの NFS ボリューム上にあるような場合、 (訳注: 一般に NFS では他ホストからの root アクセスを認めていないので) そのファイルは誰にでも読めるようになっていなければなりません)。 でもこれは他の人には読めないようにしておくことをすすめます。 このファイルの形式は上で説明されています。ユーザは自分の identity.pub, id_dsa.pub や id_rsa.pub ファイルの内容をこのファイルに入れておきます。 これは ssh-keygen(1) で説明されています。

/etc/ssh/ssh_known_hosts and $HOME/.ssh/known_hosts
    これらのファイルは、プロトコル バージョン 1 の RSA ホスト間認証または プロトコル バージョン 2 のホストベース認証とともに rhosts ファイルを 使うとき、相手ホストの公開鍵をチェックするために使用されます。 認証が成功するためには、これらのファイルのどちらかに相手のホスト鍵が 格納されていなくてはいけません。一方、SSH クライアントは このファイルを、接続先のリモートホストが本当に接続しようとしている ホストかどうか確認するのに使います。 これらのファイルは root と所有者には書き込み可能にしておきます。 /etc/ssh/ssh_known_hosts は誰からでも読めるようにしておいてください。 $HOME/.ssh/known_hosts は別にそうする必要はありません。

/etc/nologin
    このファイルが存在していると、 sshd は root を除くすべてのユーザのログインを拒否します。 このファイルの内容は root 以外で ログインしようとして拒否された人に対して表示されます。この ファイルは誰にでも読めるようになっている必要があります。

/etc/hosts.allow, /etc/hosts.deny
    このファイルは tcp-wrappers によるアクセス制限を定義しています。 詳しい説明は hosts_access(5) を参照してください。

$HOME/.rhosts
    このファイルには、各行にホスト名とユーザ名の対をスペースで区切って 格納します。当該ホストの指定されたユーザからはパスワードなしの ログインが許可されます。このファイルは rlogind および rshd からも 使われます。これはそのユーザにのみ書き込めるようにしておき、 他の人からはアクセス不可能にしておくのがよいでしょう。

    このファイルでは ネットグループ (netgroup) を使うこともできます。 ホスト名やユーザ名は +@groupname のような形式で書くことができ、 この場合はそのグループ中のすべてのホストあるいはユーザが指定されます。

$HOME/.shosts
    ssh は、これを .rhosts とまったく同じように扱います。 しかしこれは rlogind や rshd からは使われないので、SSH を使ったときのみ アクセスを許可するときにこのファイルを使います。

/etc/hosts.equiv
    このファイルは .rhosts 認証のさいに使われます。いちばん 簡単な形式は、各行にひとつのホスト名を書いておくことです。これらの ホストからのユーザは、両方のマシンでユーザ名が同じならば パスワードなしでログインを許可されます。ホスト名のあとにユーザ名を つけることもできます。この場合、そのユーザはこのマシン上で どんな ユーザとしてもログインできてしまいます (root を除く)。 “+@group” のような形式で ネットグループ (netgroup) を指定することもできます。 否定のエントリは 先頭に ‘-’ をつけてください。

    もし相手のクライアント、あるいはそこのユーザがこのファイルに マッチする場合、クライアント側とサーバ側のユーザ名が同じならばログインは 自動的に許可されます。通常はこれに加えて RSA ホスト間認証が 成功していることが必要です。このファイルは root にしか書き込み可能に してはいけません。また、誰にでも読めるようにしておくほうがよいでしょう。

    「警告: hosts.equiv でユーザ名を使うのは絶対にやめるべきです」

    これはそのユーザが本当に 誰としてでも ログインできてしまうことになるんです。つまり bin や daemon や adm や、その他非常に重要な バイナリやディレクトリを所有しているアカウントでもログインできるのです。 ユーザ名を使うのは、実際にはそのユーザに root の アクセスを許しているのと同じです。ここでのユーザ名の唯一の まともな使いみちは、おそらく否定のエントリで使うことだけでしょう。

    ここでの警告は rsh/rlogin にもあてはまることを覚えておいてください。

/etc/shosts.equiv
    これは /etc/hosts.equiv とまったく同じように使われます。 このファイルは rsh や rlogin を ssh と同じ環境で動かすときに有用でしょう。

$HOME/.ssh/environment
    このファイルは (存在していれば) ログイン時に環境変数に読み込まれ ます。これが含んでいてよいのは、空行、コメント行 ( ‘#’ で始まる)、および ``変数名=値'' の形式の代入行だけです。このファイルは そのユーザにのみ書き込み可能にしておいてください。べつに 他人が読めるようにしておく必要もありません。 環境変数の変更はデフォルトでは禁止されており、これを許可するには PermitUserEnvironment を設定する必要があります。

$HOME/.ssh/rc
    このファイルが存在していると、環境変数ファイルが読み込まれた 後にこのファイルが /bin/sh によって実行されます。これはユーザの シェルあるいはコマンドの実行よりも前におこなわれます。 このファイルは標準出力には何も出力してはいけません。 かわりに標準エラー出力を使ってください。X11 転送を使っているときは、 このスクリプトには標準入力から ``プロトコル クッキー'' の対 (および環境変数には DISPLAY ) が与えられます。このとき、スクリプトは xauth(1) を呼び出す必要があります。なぜなら sshd はこの場合 X11 クッキーを追加するための xauth を自動的には 実行しないからです。

    このファイルの基本的な目的は、ユーザがホームディレクトリに アクセス可能になる前に必要と考えられる初期化ルーチンを実行することです。 とくにこのような環境の例として、AFS があります。

    おそらくこのファイルは、たとえば次のような何らかの初期化コードを 含むことになるでしょう:

        if read proto cookie && [ -n "$DISPLAY" ]; then
        	if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
        		# X11UseLocalhost=yes
        		echo add unix:`echo $DISPLAY |
        		    cut -c11-` $proto $cookie
        	else
        		# X11UseLocalhost=no
        		echo add $DISPLAY $proto $cookie
        	fi | xauth -q -
        fi

    このファイルが存在しない場合は /etc/ssh/sshrc が実行されます。これも存在しない場合は、 xauth がクッキーを追加するために使われます。

    このファイルは、そのユーザにのみ書き込み可能にしておいてください。 誰でも読めるようにしておく必要はありません。

/etc/ssh/sshrc
    $HOME/.ssh/rc に似ています。これはそのマシン全体にわたって ログイン時の初期化を指定するのに使われます。これは root のみ書き込み可能にしておき、誰からも読めるようにしておくべきです。

作者
OpenSSH は Tatu Ylonen による、フリーな オリジナル版 ssh 1.2.12 リリースから派生したものです。 Aaron Campbell、 Bob Beck、 Markus Friedl、 Niels Provos、 Theo de Raadt および Dug Song が多くのバグをとり除き、 新しい機能をふたたび追加して OpenSSH をつくりました。 SSH プロトコル バージョン 1.5 および 2.0 のサポートは Markus Friedl の貢献によるものです。 Niels Provos および Markus Friedl が特権分離のサポートに 貢献しました。

日本語訳
新山 祐介 (yusuke at cs . nyu . edu) 2003/3/31 (for 3.6p1)

関連項目
scp(1), sftp(1), ssh(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), login.conf(5), moduli(5), sshd_config(5), sftp-server(8) T. Ylonen, T. Kivinen, M. Saarinen, T. Rinne, S. Lehtinen, SSH Protocol Architecture, draft-ietf-secsh-architecture-12.txt, January 2002, work in progress material. M. Friedl, N. Provos, W. A. Simpson, Diffie-Hellman Group Exchange for the SSH Transport Layer Protocol, draft-ietf-secsh-dh-group-exchange-02.txt, January 2002, work in progress material.