SSHD(8)

名称
sshd - OpenSSH SSH デーモン

書式
sshd [-deiqD46] [-b ビット数] [-f 設定ファイル] [-g ログイン猶予時間] [-h ホスト鍵ファイル] [-k 鍵の生成間隔] [-p ポート番号] [-u 長さ] [-V クライアントプロトコルID]

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

sshd はクライアントからの接続を listen しているデーモンです。通常 これはブート時に /etc/rc.network から起動され、接続を受けつけるたびに新しいデーモンが 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(8), rlogind(8), rexecd(8), rexd(8) を止めないかぎり (これは rlogin(1) と rsh(1) を完全に禁止することになりますが)、 システムのセキュリティは改善されません。

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

バージョン 2 も同様に動作します: 各ホストは固有のホスト 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 ログイン猶予時間
    クライアントが自分自身を認証するのにかかる猶予時間を与えます (デフォルトは 600秒)。クライアントがこの時間内にユーザを 認証できなかった場合、サーバは接続を切って終了します。0 を 値として与えると猶予は無限になります。

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

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

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

-p ポート番号
    サーバが接続を受けつける (listen する) ポート番号を指定します (デフォルトは 22 です)。

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

-u 長さ
    このオプションはリモートホスト名を保持させる utmp 構造体のフィールド長を指定するのに使われます。名前解決されたホストがこの len よりも長い場合、ドットで区切られた 10進の数値がかわりに保持されます。 これは非常に長いホスト名をもつホストがこのフィールドをあふれさせても、 一意に識別できるようにするためです。 -u0 を指定すると utmp ファイルにはつねにドットで区切られた 10進値が使われるようになります。

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

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

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

設定ファイル
sshd は /etc/ssh/sshd_config (あるいはコマンドラインから -f オプションで指定したファイル) から設定を読み込みます。 このファイルの各行は ``キーワード 値'' の形式になっており、 空行あるいは ‘#’ で始まる行はコメントとみなされます。

使用できるキーワードは次のとおりです:

AFSTokenPassing (AFS トークンパス)
    このオプションは AFS トークンがサーバに転送されるかどうかを指定します。 デフォルトは “yes” です。

AllowGroups (許可するグループ)
    このキーワードにはいくつかのグループ名をスペースで区切って 指定します。これが指定されると、ユーザの基本グループが そのパターンのどれかにマッチするグループであるようなユーザだけが ログインを許可されます。パターン中では ‘*’ および ‘’? がワイルドカードとして使えます。有効なのはグループの「名前」だけで、 数字で表されたグループ ID は認識されません。デフォルトでは、 ログインはユーザの基本グループに関係なく許可されています。

AllowTcpForwarding (TCP 転送の許可)
    TCP 転送を許可するかどうかを指定します。デフォルトは “yes” です。TCP 転送を禁止しても、ユーザにシェルのアクセスを禁止しない かぎりセキュリティの向上にはならないことに注意してください。 なぜならユーザはいつでも自分自身で転送プログラムをインストールして 使うことができるからです。

AllowUsers (許可するユーザ)
    このキーワードにはいくつかのユーザ名をスペースで区切って 指定します。これが指定されると、そのパターンのどれかにマッチする ユーザだけがログインを許可されます。パターン中では ‘*’ および ‘’? がワイルドカードとして使えます。有効なのはユーザの「名前」だけで、 数字で表されたユーザ ID は認識されません。デフォルトでは、 ログインはユーザ名に関係なく許可されています。

Banner (バナー)
    司法管区によっては、法的な保護を受けるためには 認証の前に警告メッセージを送ったほうがよい場合があります。 ここで指定されたファイルの内容は、認証が許可される前に リモートユーザに提示されます。 このオプションは プロトコル バージョン 2 でのみサポートされています。

ChallengeResponseAuthentication (チャレンジ・レスポンス認証)
    チャレンジ・レスポンス認証を許可するかどうかを指定します。 現在 skey(1) 認証のみがサポートされています。 デフォルトは “yes” です。

Ciphers (SSH2の暗号化アルゴリズム)
    プロトコル バージョン 2 で許可される暗号化アルゴリズムを 指定します。複数のアルゴリズムを指定する場合は、 コンマで区切ってください。 デフォルトは “aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour” です。

CheckMail (メール確認)
    sshd が、対話的ログインに対して新規メールを確認すべきかを指定します。 デフォルトは “yes” です。

ClientAliveInterval (クライアントの生存チェック間隔)
    sshd は一定時間ごとに、 暗号化された通信路を経由してクライアントに応答を要求するメッセージ (client alive message) を送ります。 その際、何もデータが送られてこなかったらタイムアウトする 時間を秒数で指定します。デフォルトの値は 0 で、 これはメッセージを送らないことを意味します。 このオプションは プロトコル バージョン 2 でのみサポートされています。

ClientAliveCountMax (クライアントの生存チェック最大カウント数)
    sshd が無反応のクライアントに対して client alive message (上記参照) を送ってみる最大数を指定します。 client alive message に対する応答が連続してこの回数だけなかった場合、 sshd は接続を切り、セッションを終了します。 client alive message は、 Keepalive (下記) とはまったく違うことに注意してください。 client alive message は暗号化された経路を介して送られるので、 偽造されることはありません。 Keepalive によって設定される TCP の keepalive オプションは 偽造される可能性があります。client alive のメカニズムは クライアントあるいはサーバが、いつ接続が切れたのかを 知りたいときに役立ちます。

    デフォルトの値は 3 です。もし ClientAliveInterval (上記) が 15 に設定され、 ClientAliveCountMax がデフォルトのままである場合、これに反応できない ssh クライアントは およそ 45秒後に接続が切られます。

DenyGroups (拒否するグループ)
    このキーワードにはいくつかのグループ名をスペースで区切って指定します。 ユーザの基本グループがこのパターンのどれかに マッチするようなユーザにはログインを許可しません。パターン中では ‘*’ および ‘’? がワイルドカードとして使えます。有効なのは グループの「名前」だけで、数字で表されたグループ ID は 認識されません。デフォルトでは、ログインはユーザの基本グループに 関係なく許可されています。

DenyUsers (拒否するユーザ)
    このキーワードにはいくつかのグループ名をスペースで区切って 指定します。これが指定されると、そのパターンにマッチする このパターンのどれかにマッチするユーザにはログインを許可しません。 ‘*’ および ‘’? がワイルドカードとして使えます。 有効なのはグループの「名前」だけで、数字で表されたグループ ID は 認識されません。デフォルトでは、ログインはユーザ名に関係なく許可されています。

GatewayPorts (ポート中継の許可)
    リモートホストがクライアント側に転送されたポートに接続することを 許可するかどうかを指定します。 この引数の値は “yes” あるいは “no” です。デフォルトは “no” になっています。

HostbasedAuthentication (ホストベース認証の許可)
    公開鍵ホスト認証が成功したときに、 rhosts あるいは /etc/hosts.equiv 認証を許可するかどうかを 指定します (ホストベース認証)。 このオプションは RhostsRSAAuthentication (RhostsRSA 認証の許可) に似ており、プロトコル バージョン 2 のみに作用します。 デフォルトの値は “no” になっています。

HostKey (ホスト鍵)
    SSH プロトコル バージョン 1 および 2 で使われる、ホスト秘密鍵が 入っているファイル (デフォルトは /etc/ssh/ssh_host_key ) を指定します。 このファイルがグループあるいは他人からアクセス可能になっていると、 sshd はその使用を拒否するので注意してください。 複数のホスト鍵を使うことも可能です。 “rsa1” 鍵はバージョン 1 に使われ、 “dsa” または “rsa” はバージョン 2 の SSH プロトコルに使われます。

IgnoreRhosts (rhosts の無視)
    RhostsAuthentication, RhostsRSAAuthentication または HostbasedAuthentication の各認証で、 .rhosts および .shosts ファイルを使わないようにします。

    この状態でも、 /etc/hosts.equiv および /etc/ssh/shosts.equiv は依然として有効です。デフォルトでは “yes” になっています。

IgnoreUserKnownHosts (ユーザ用 known_hosts の無視)
    RhostsRSAAuthentication または HostbasedAuthentication の各認証で、ユーザの $HOME/.ssh/known_hosts ファイルを使わないようにします。 デフォルトは “no” です。

KeepAlive (接続を生かしておく)
    システムが相手のマシンに keepalive メッセージを送るかどうかを 指定します。これが送られると、接続の異常終了や相手マシンの クラッシュが正しく通知されるようになります。 しかしこれを使うと、たとえ経路が一時的にダウンしていても 接続が死んでいるということになってしまい、これが邪魔になる場合もあります。 その一方で、もし keepalive が送られないとすると、セッションは サーバ上で永久に残ってしまことがあり、 “幽霊” ユーザを居座らせてサーバ資源を消費することがあります。

    デフォルトは “yes” (keepalive を送る) です。そのため クライアントはネットワークがダウンするか、 リモートホストが落ちると通知してきます。 これは永久に残るセッションを防ぎます。

    Keepalive を禁止するには、 クライアントとサーバ両方の側の設定ファイルでこの値を “no” にする必要があります。

KerberosAuthentication (Kerberos 認証)
    Kerberos 認証をおこなうかどうか指定します。 この認証は Kerberos チケットか、あるいはもし PasswordAuthentication が yes になっている場合なら、ユーザが入力して Kerberos KDC 経由で批准されたパスワードが使われます。 このオプションを使うには、サーバに KDC のアイデンティティを 批准するための Kerberos servtab が必要です。 デフォルトでは “yes” になっています。

KerberosOrLocalPasswd (Kerberosあるいはローカルパスワード)
    これが指定されている場合、Kerberos 経由のパスワード認証が 失敗すると、そのパスワードは /etc/passwd などの別のローカルな機構によって確認されます。デフォルトは “yes” です。

KerberosTgtPassing (Kerberos TGT パス)
    Kerberos TGT をサーバに転送してもよいかどうかを指定します。デフォルトは “no” です。なぜなら、これがまともに動くのは Kerberos KDC が 実際の AFS kaserver であるときだけだからです。

KerberosTicketCleanup (Kerberos チケット自動除去)
    ユーザのチケット用キャッシュをログアウト時に自動的に消去するかどうかを 指定します。デフォルトは “yes” です。

KeyRegenerationInterval (鍵の再生成間隔)
    プロトコル バージョン 1 では、サーバ鍵は (一度でも使われると) ここで 指定された秒数ごとに自動的に再生成されます。このように鍵を再生成する 目的は、あとでそのマシンに侵入して盗聴したセッションを解読されたり、 鍵を盗まれたりするのを防ぐためです。この鍵はどこにも格納されません。 値としてゼロを指定すると、鍵はまったく再生成されなくなります。 デフォルトでは 3600 (秒) になっています。

ListenAddress (接続受付アドレス)
    sshd が接続を受けつける (listen する) ローカルアドレスを指定します。 ここでは以下の形式が使えます:

    ListenAddress host|IPv4_addr|IPv6_addr
    ListenAddress host|IPv4_addr:port
    ListenAddress [ host|IPv6_addr]:port

    port が指定されていないときは、 sshd はそのアドレスで、それまでの Port オプションで指定されたすべてのポートで接続を受けつけます。 デフォルトではすべてのローカルアドレスに対して 接続を受けつけるようになっています。 ListenAddress 項目は複数指定してもかまいません。また Port オプションは、ポートつきでないアドレス指定に対しては このオプションよりも前に指定しておく必要があります。

LoginGraceTime (ログイン猶予時間)
    ユーザがこの時間内でログインに成功できないと、サーバは接続を切ります。 この値を 0 にすると、時間に制限はなくなります。 デフォルトは 120 (秒) です。

LogLevel (ログレベル)
    sshd が出力するログメッセージの冗長性レベルを指定します。 とりうる値は次のとおりです: QUIET, FATAL, ERROR, INFO, VERBOSE および DEBUG。デフォルトでは INFO です。DEBUG レベルのログは ユーザのプライバシーを侵害するものであり、勧められるものではありません。

MACs
    使用可能な MAC (メッセージ認証コード) アルゴリズムを指定します。 MAC アルゴリズムは、データの完全性保護のために、 プロトコルバージョン 2 で使用されます。 複数のアルゴリズムをコンマで区切って指定可能です。 デフォルトは次の通りです:

          ``hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@openssh.com,
            hmac-sha1-96,hmac-md5-96''

MaxStartups (最大起動数)
    sshd デーモンに対する認証以前の接続を、最大で同時にどれくらい 受けつけるかを指定します。これを超える接続は認証が成功するか、 あるいは接続の LoginGraceTime (ログイン猶予時間) が切れるまで受けつけられず、捨てられます。 デフォルトではこの数は 10 です。

    もうひとつの方法は、コロンで区切った 3 つの値を与えることにより 早期のランダムな接続拒否を許可することです。この値は “start:rate:full” (``開始時:確率:最大数'') のような形をとります (例: "10:30:60" など)。 sshd は認証以前の接続が “start” (この例では 10) 個を超えると、これ以後の接続要求を “rate/100” (この例では 30%) の確率で拒否しはじめます。この確率は “full” (この例では 60) 個の接続が来るまで線形に増えつづけ、 最大数に達した時点でそれ以降すべての接続を拒否するようになります。

PAMAuthenticationViaKbdInt
    PAM チャレンジ・レスポンス認証が許可されるかを指定します。 ほとんどの PAM チャレンジ・レスポンスモジュールの使用を許可しますが、 PasswordAuthentication が無効になっている場合でさえパスワード認証を許可してしまいます。 デフォルトは “no” になっています。

PasswordAuthentication (パスワード認証)
    パスワード認証を許可するかどうかを指定します。デフォルトでは “yes” になっています。

PermitEmptyPasswords (空のパスワード許可)
    パスワード認証が許可されているとき、パスワード文字列が空の アカウントに対してサーバがログインを許可するかどうか指定します。 デフォルトは “no” になっています。

PermitRootLogin (root ログイン許可)
    ssh(1) を使って、root がログインできるかどうかを指定します。この引数の値は “yes” 、 “without-password” (パスワード認証なし)、 “forced-commands-only” (コマンドのみに強制) あるいは “no” のいずれかになります。デフォルトは “no” です。

    “without-password” にすると、root にのみ パスワード認証が不許可になります。

    “forced-commands-only” にすると、公開鍵認証による root ログインが許可されますが、 command オプションが指定された場合にのみ限られます (これは、通常は root ログインを禁止しても、 リモートバックアップをとるときなどに有効です)。 他の認証方式は root に対しては不許可になります。

    “no” にすると、root のログインは許可されません。

PidFile (pid ファイル)
    sshd デーモンのプロセス ID を格納するファイルを指定します。 デフォルトでは /var/run/sshd.pid になっています。

Port (ポート)
    sshd が接続を受けつける (listen する) ポート番号を指定します。 デフォルトは 22 です。複数指定することも可能です。 ListenAddress も参照してください

PrintLastLog (lastlog 表示)
    ユーザが最後にログインした日付と時刻を sshd が表示すべきかを指定します。 デフォルトは “yes” になっています。

PrintMotd (motd 表示)
    ユーザが対話的にログインしたとき、 sshd が /etc/motd の内容を表示するかどうかを指定します (システムによっては、これはシェルや /etc/profile に類するものが表示します)。デフォルトは “yes” です。

Protocol (プロトコル)
    sshd がサポートすべきプロトコルのバージョンを指定します。 とりうる値は “1” と “2” で、複数のバージョンをコンマで 区切って指定することもできます。デフォルトは “2,1” です。

PubkeyAuthentication (公開鍵認証)
    公開鍵認証を許可するかを指定します。 デフォルトは “yes” です。 このオプションはプロトコルバージョン 2 にのみ適用されることに注意してください。

ReverseMappingCheck (逆マッピングチェック)
    sshd がリモートホスト名を確認し、 リモート IP アドレスに対して解決されたホスト名が正に同じ IP アドレスに 再度マップされることを確認すべきかを指定します。 デフォルトは “no” です。

RhostsAuthentication (rhosts 認証)
    rhosts や /etc/hosts.equiv だけを使った認証でログインを許可して しまってもよいかどうかを指定します。通常これは安全でないため 許可すべきではありません。かわりに RhostsRSAAuthentication を使うべきです。なぜならこれは通常の rhosts や /etc/hosts.equiv 認証に加えて、RSA ベースのホスト間認証を行うからです。 デフォルトではこのオプションは “no” になっています。 このオプションはプロトコルバージョン 1 にのみ適用されることに注意してください。

RhostsRSAAuthentication (rhosts-RSA 認証)
    RSA ホスト間認証が成功しているとき、rhosts 認証や /etc/hosts.equiv 認証を使ってよいかどうかを指定します。デフォルトは “no” です。 このオプションはプロトコルバージョン 1 にのみ適用されることに注意してください。

RSAAuthentication (RSA 認証)
    純粋な RSA 認証を許可するかどうかを指定します。デフォルトは “yes” になっています。 このオプションはプロトコルバージョン 1 にのみ適用されることに注意してください。

ServerKeyBits (サーバ鍵のビット数)
    短命なプロトコルバージョン 1 サーバ鍵のビット数を定義します。 最小値は 512 で、デフォルトは 768 です。

SkeyAuthentication (skey 認証)
    skey(1) 認証が許可されるかを指定します。 デフォルトは “yes” です。 OPIE 認証が許可されるのは、 PasswordAuthentication も許可されている場合のみです。

StrictModes (厳格モード)
    sshd がログインを許可する前に、ユーザのファイルおよび ホームディレクトリの所有権とパーミッションをチェックすべきか どうかを指定します。これはふつう初心者が、しばしば自分の ディレクトリを誰でも書き込めるようにしてしまう事故を防ぐために 有効です。デフォルトでは “yes” になっています。

Subsystem (サブシステム)
    外部サブシステム (ファイル転送デーモンなど) を設定します。 このオプションへの引数はサブシステム名と、そのサブシステムに 要求があったとき実行されるコマンドを与えます。 sftp-server(8) はファイル転送サブシステム “sftp” を実装したものです。デフォルトではサブシステムは 何も定義されていません。このオプションは プロトコルバージョン 2 にのみ適用されることに注意してください。

SyslogFacility (syslog ファシリティ)
    sshd が出力するログメッセージで使われるログのファシリティ を指定します。とりうる値は次のとおりです: DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7。デフォルトは AUTH です。

UseLogin (login の使用)
    対話的ログインセッションのさい、 login(1) プログラムを使うかどうかを指定します。 対話的でないリモートコマンド実行のときに login(1) が使われることは決してありません。 デフォルトでは “no” になっています。

X11DisplayOffset (X11 ディスプレイ基底番号)
    sshd が X11 転送をするときに最初に使われるディスプレイ番号を指定します。これは sshd が本物の X11 サーバと衝突してしまうのを防ぎます。 デフォルトは 10 です。

X11Forwarding (X11 転送)
    X11 転送を許可するかどうかを指定します。デフォルトは “no” です。X11 転送を禁止してもセキュリティを上げることにはまったくなりません。 ユーザはいつでも自分自身で転送プログラムをインストールできるのです。

XAuthLocation (xauth の位置)
    xauth(1) プログラムの位置を指定します。デフォルトでは /usr/X11R6/bin/xauth になっています。

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

1.  ユーザが端末にログインしており、コマンドが指定されていない場合、 (設定ファイルまたは $HOME/.hushlogin で禁止されていなければ) 最終ログイン時刻と /etc/motd を表示する。 関連ファイル セクションも参照のこと。

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

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

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

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

6.  $HOME/.ssh/environment が存在するなら、それを読み込む。

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

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

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

authorized_keys ファイルの形式
$HOME/.ssh/authorized_keys ファイルには、 プロトコルバージョン 1 の RSA 認証に 使うことを許可されている公開鍵の一覧が入っています。 同様に $HOME/.ssh/authorized_keys2 ファイルには、 プロトコルバージョン 2 の RSA 認証および公開鍵認証 (PubkeyAuthentication) に使うことを許可されている公開鍵の一覧が入っています。

これらのファイルは各行にひとつの鍵が格納されています (空行や ‘#’ で始まる行はコメントとして無視されます)。 各 RSA 公開鍵は次のようなフィールドから 成ります: オプション、ビット数、指数、係数、コメント。 各プロトコルバージョン 2 公開鍵は次のようなフィールドから成ります: オプション、キータイプ、base64 でエンコードした鍵、コメント。 オプションの フィールドはなくてもかまいません。オプションが存在するかどうかは、 この行が数字で始まるかどうかによって決定されます (オプションフィールドは 決して数字では始まりません)。ビット数、指数、係数の部分で プロトコルバージョン 1 の RSA 鍵を 表しています。コメントフィールドは特に使われません (が、これをつけておくと ユーザが鍵を見分けるのに便利です)。 プロトコルバージョン 2 では、キータイプは “ssh-dss” または “ssh-rsa” です。

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

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

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

command="command"
    この鍵が認証に使われたときは、指定されたコマンドが実行されるように します。ユーザが指定してきたコマンドは (あっても) 無視されます。 このコマンドは、接続要求が仮想端末からくれば、仮想端末上で 走ります。それ以外のときは端末なしで走ります。 8 ビットクリーンなチャネルが必要な場合は、仮想端末を要求しないか、 no-pty を指定すべきです。 コマンドの中に 引用符を入れたいときはバックスラッシュを前につけてください。 このオプションは、ある RSA 鍵には特定の操作だけしかさせないように するのに有効です。例としては、リモートバックアップだけをさせて、 それ以外な何もさせないようにする鍵などがあります。クライアントの TCP/IP や X11 転送は、明示的に禁止されていない限り可能なので注意してください。

environment="NAME=value"
    この鍵が使われたとき、環境変数に追加される文字列を指定します。この やりかたで指定した環境変数は、デフォルトの環境変数の値を上書きします。 このオプションは複数指定することも可能です。

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

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

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

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

permitopen="host:port"
    ローカルの ``ssh -L'' ポート転送を許可し、指定したホストとポートのみに接続可能となるようにします。 複数の permitopen オプションをコンマで区切って指定可能です。 指定したホスト名に対してはパターンマッチングは行われません。 ホスト名は、文字通りのドメイン名であるかアドレスである必要があります。

  例
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, /etc/ssh/ssh_known_hosts2, $HOME/.ssh/known_hosts, $HOME/.ssh/known_hosts2 ファイルは、今までに知られているホストの公開鍵を格納しています。 大域的なファイルは管理者によって (オプションで) 用意され、ユーザごとのファイルは自動的に管理されます。 つまりユーザがまだ知られていないホストから接続したときはいつでも、その ホスト鍵がユーザのファイルに追加されるのです。

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

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

ビット数、指数および係数は 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 の設定ファイルです。このファイルに書き込めるのは root だけでなくてはいけませんが、読むのは誰でもできるように しておいたほうがよいでしょう (必須ではありませんが)。

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

/etc/primes
    "Diffie-Hellman Group Exchange" で使用される Diffie-Hellman グループを含みます。

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

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

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

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

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

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

/etc/hosts.allow
    LIBWRAP サポート付きでコンパイルされている場合、 tcp-wrappers によるアクセス制限がここに指定されます。 詳細は hosts_access(5) を参照してください。

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

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

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

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

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

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

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

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

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

$HOME/.ssh/rc
    このファイルが存在していると、環境変数ファイルが読み込まれた 後にこのファイルが /bin/sh によって実行されます。これはユーザの シェルあるいはコマンドの実行よりも前に行われます。X11 偽装 [訳注: クライアント側でいうところの X11 転送] を使っているときは、この ファイルには標準入力から ``プロトコルクッキー'' の対 (および環境変数には DISPLAY ) が与えられます。このときはここで xauth(1) を呼び出す必要があります。

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

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

        if [ -n "$DISPLAY" ] && read proto cookie; then
            echo add "$DISPLAY" "$proto" "$cookie" | xauth -q -
        fi

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

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

/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 を作りました。 Markus Friedl が、SSH プロトコルバージョン 1.5 と 2.0 を提供しました。

日本語訳
新山 祐介 (euske@cl.cs.titech.ac.jp) 2000/11/23

当マニュアルページは氏のご好意により FreeBSD 日本語マニュアルに収録させていただいています。 翻訳についてのご意見、ご指摘がありましたら新山氏 <euske@cl.cs.titech.ac.jp>、および FreeBSD jpman プロジェクト <man-jp@jp.FreeBSD.org> までお送りください。

関連項目
scp(1), sftp(1), sftp-server(8), ssh(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), rlogin(1), rsh(1) T. Ylonen, T. Kivinen, M. Saarinen, T. Rinne, S. Lehtinen, SSH Protocol Architecture, draft-ietf-secsh-architecture-07.txt, January 2001, 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-00.txt, January 2001, work in progress material.