SSHD (8)

OpenSSH-7.3p1 日本語マニュアルページ (2016/10/15)


名前

sshd
OpenSSH SSH デーモン

書式

sshd [-46DdeiqTt ] [-b ビット数 ] [-C 接続指定 ] [-c ホスト証明書ファイル ] [-E ログファイル ] [-f 設定ファイル ] [-g ログイン制限時間 ] [-h ホスト鍵ファイル ] [-k 鍵の生成間隔 ] [-o オプション ] [-p ポート ] [-u 長さ ]

説明

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

sshd はクライアントからの接続を listen します。通常、これはブート時に/etc/rcから起動され、接続を受けつけるたびに新しいデーモンが fork します。fork したデーモンは、鍵の交換、暗号化、認証、コマンド実行、そしてデータ交換をおこないます。

sshd はコマンドライン オプションか、設定ファイル(デフォルトではsshd_config (5)) によって設定することができます。コマンドラインからのオプションは、設定ファイルで指定されている値よりも優先されます。sshd はハングアップシグナルSIGHUPを受け取ると、自分の設定ファイルを読み込みなおします。これは自分自身を開始したときのパス名、たとえば/usr/sbin/sshdとオプションを exec することによっておこないます。

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

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

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

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

-C 接続指定
拡張テストモード-T で使われる接続時のパラメータを指定します。このオプションが与えられた場合、そこで指定されているユーザ、ホスト名、およびアドレスに一致するような、設定ファイル中のMatch指定すべてが標準出力に表示されます。接続指定は「キーワード=値」の形式で指定し、使えるキーワードは"user"、"host"、"laddr"、"lport"および"addr"です。これらは順序は関係ありませんが、すべてを指定する必要があります。これらの指定をカンマで区切るか、あるいは複数の-C オプションを使ってもかまいません。

-c ホスト証明書ファイル
鍵交換のさいsshd が自己の証明に使う証明書ファイルのパス名を指定します。証明書は、-h オプションまたはHostKey設定項目で指定したホスト鍵ファイルに対応するものでなければなりません。

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

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

-E ログファイル
デバッグ用ログを syslog 出力ではなく、ログファイル に追加します。

-e
デバッグ用ログを syslog のかわりに標準エラー出力に送ります。

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

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

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

-i
sshdinetd (8) から起動されることを指定します。SSH プロトコル 1 が許可されている場合、ふつうsshd が inetd から起動すべきではありません。なぜなら sshd はクライアントを受けつける前にサーバ鍵を生成しておく必要があり、これには時間がかかるためです。

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

-o オプション
設定ファイルと同じ形式でオプションを与えたいときに使用します。これはコマンドラインオプションでは指定できないオプションを指定したいときに便利です。オプションの詳細と、これらがとりうる値についてはsshd_config (5) を参照してください。

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

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

-T
拡張テストモード。設定ファイルの正当性を検査し、有効な設定項目を標準出力に表示したあと終了します。オプションとして、-C を指定すると、そこで指定されているひとつあるいは複数の接続パラメータにMatch指定が適用されます。

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

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

認証

OpenSSH SSH デーモンは、デフォルトではSSH プロトコル 2 のみをサポートしていますが、サポートするプロトコルはsshd_config (5)Protocolオプションで変更できます。プロトコル 1 は使用すべきではありません。これはレガシー・デバイスのサポート用のみに提供されています。

各ホストは、そのホストを特定するための鍵を保持しています。プロトコル 1 では、サーバ起動時に生成される通常 1024 ビットの追加のサーバ鍵によって、部分的な forward security(訳注: 将来、鍵が破られても現在の通信の秘匿性が保たれる特性) を提供しています。サーバ鍵は使われると通常 1 時間おきに再生成され、これは決してディスクに保存されません。クライアントが接続してくると、デーモンはそのホスト公開鍵とサーバ鍵を使って応答します。クライアントはその RSA ホスト鍵を自分のデータベース中にあるものと比較し、それが変更されていないことを確かめます。その後クライアントは 256 ビットの乱数を生成し、ホスト鍵とサーバ鍵を使って暗号化したあと暗号化された数値をサーバに送ります。以降、クライアントとサーバの両者はこの乱数をセッション鍵として使い、通信を暗号化します。これ以降の通信は一般的な Blowfish あるいは 3DES (デフォルト)暗号方式を使って暗号化されます。暗号方式は、クライアントがサーバから提供されたものの中から選択します。

プロトコル 2 では、forward security はDiffie-Hellman 鍵交換によって提供されます。この鍵交換プロセスにより、サーバとクライアント間で共通のセッション鍵が得られます。これ以降の通信は現在のところ128-bit AES, Blowfish, 3DES, CAST128, Arcfour, 192-bit AESあるいは 256-bit AES などの共通鍵暗号方式によって暗号化されます。暗号方式は、クライアントがサーバから提供されたものの中から選択します。さらに、通信の正真性 (integrity、訳注: 内容が改ざんされていないこと) がメッセージ認証コード (MAC) によって提供されます。これにはhmac-md5, hmac-sha1, umac-64, umac-128, hmac-ripemd160,hmac-sha2-256 あるいは hmac-sha2-512 が使われます。

最後にサーバとクライアントは認証をおこないます。ここではクライアントは自分自身を認証するために、ホストベースド認証 (host-based authentication)、公開鍵認証 (public key authentication)、チャレンジ・レスポンス認証 (challenge-response authentication)、またはパスワード認証 (password authentication) を使用します。

認証の形式に関わらず、アカウントがアクセス可能かどうかをチェックします。アカウントがロックされているか、DenyUsersに記載されているか、またはそのグループがDenyGroupsに記載されている場合、アカウントはアクセスできません。ロックされたアカウントの定義はシステムに依存します。いくつかのプラットフォーム (例えば AIX) では独自のアカウントデータベースを持ち、またいくつかは passwd フィールドを変更します(Solaris および UnixWare では *LK* , HP-UX では * , Tru64 では Nologin を含みます。また FreeBSD では *LOCKED* , Linux では !! が先行します)。あるアカウントに公開鍵認証を許可しておきながら、パスワード認証を無効にする必要がある場合、パスワードフィールドはこれら以外の値(例えば NP または *NP* ) に設定する必要があります。

クライアントが認証に成功すると、セッションを準備するための対話がおこなわれます。この時点で、クライアントは仮想端末の使用を要求したり、X11 接続の転送、TCP 接続の転送、あるいは認証エージェントの転送などを安全な通信路を介して要求することができます。

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

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


ログインの過程

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

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

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

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

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

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

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

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

~/.ssh/rcが存在し、なおかつsshd_config (5) PermitUserRCが許可されている場合、それを実行する。そうでなければ、もし/etc/ssh/sshrcが存在しているなら、それを実行する。これ以外の場合は xauth を実行する。この"rc"ファイルには、X11 の認証プロトコルとそのクッキーが標準入力から与えられる。(下記のSSHRCを参照してください。)

ユーザのシェルまたはコマンドを実行する。すべてのコマンドは、システムパスワードデータベースで指定されたそのユーザのログインシェル上で実行されます。

SSHRC

~/.ssh/rcファイルが存在する場合は、環境変数ファイルを読み込んだあと、ユーザのシェルやコマンドが開始する前にこのファイルがsh (1) を介して実行されます。このスクリプトは標準出力 (stdout) に何も表示してはいけません。かわりに標準エラー出力 (stderr) を使ってください。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 が実行されます。


AUTHORIZED_KEYS ファイルの形式

AuthorizedKeysFile項目は公開鍵認証のための公開鍵を格納するファイルを指定します。指定がない場合、このファイルはデフォルトで~/.ssh/authorized_keysおよび~/.ssh/authorized_keys2となります。このファイルには各行にひとつの鍵が格納されています (空行や # で始まる行はコメントとして無視されます)。プロトコル 1 の公開鍵では、空白で区切られた以下の項目が格納されています:オプション、ビット数、指数、係数 (modulus)、鍵のコメント。プロトコル 2 の公開鍵では、以下の項目が格納されています:オプション、鍵の種類、base64 エンコードされた鍵本体、鍵のコメント。オプション項目はなくてもかまいません。オプションが存在するかどうかは、この行が数字で始まるかどうかによって決定されます(オプション項目は決して数字では始まりません)。プロトコル 1 では、RSA 鍵はビット数、指数および係数 (modulus) によって表されます。コメント欄は利用されません (が、鍵を区別するのに役立ちます)。プロトコル 2 では、鍵の種類は"ecdsa-sha2-nistp256 ,""ecdsa-sha2-nistp384 ,""ecdsa-sha2-nistp521 ,""ssh-ed25519 ,""ssh-dss"あるいは"ssh-rsa"です。

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

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

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

agent-forwarding
以前restrictオプションによって禁止されていた認証エージェントの転送を許可します。

cert-authority
ここで指定されている鍵が、認証局 (CA) のものであることを指定します。CA はユーザ認証のための署名された証明書を確認するときに使われます。

証明書には、これら鍵のオプションと同様のアクセス制限が指定されていることもあります。証明書と鍵のオプションの両方でアクセス制限が指定されている場合は、これら2つのうち最小の和集合 (原文: the most restrictive union of the two) となるものが適用されます。

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

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

from=pattern-list
このオプションをつけると、公開鍵認証に加えて、カンマで区切ったリモートホスト名 (canonical name) または IPアドレスをチェックできるようになります。パターンに関する詳細は、ssh_config (5) の「パターン」の項を参照してください。

ホスト名やIPアドレスにはワイルドカード指定が使用できますが、from節には CIDR表記 (アドレス/マスク長 の形式) で IPアドレス群を指定することもできます。

このオプション目的は、セキュリティのさらなる向上です:公開鍵認証それ自体は、(鍵を除いて) ネットワークやネームサーバ、その他ありとあらゆるものを信用しません。しかし、もし何者かが何らかの方法で鍵を盗むことができれば、その鍵を使って世界のどこからでもログインできてしまうことになります。このオプションは、そのような盗まれた鍵を使うことをより困難にします (もしこれを使おうとするなら、鍵のほかにネームサーバやルータなどにまで侵入しなくてはならないからです)。

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

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

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

no-user-rc
~/.ssh/rcの実行を禁止します。

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

permitopen=host:port
ローカルなssh (1) -L のポート転送先を、指定されたホストの指定されたポートのみに限定します。IPv6 アドレスは、ブラケット [ ] で区切って指定できます。permitopenオプションはカンマで区切って複数個指定することもできます。パターンマッチングはおこなわれません。ホスト名にはドメイン名かアドレスをそのまま書く必要があります。*のようなポート指定は、どのポートにもマッチします。

port-forwarding
以前restrictによって禁止されていたポート転送を許可します。

principals=principals
cert-authority行で、証明書による認証が許可されている principal の一覧をカンマで区切って指定します。その認証が受け入れられるためには、少なくともこれらのうちひとつの名前が、証明書の principal 一覧に記されている必要があります。このオプションは、cert-authorityで指定される、信頼された証明書の署名者とみなされていない鍵に対しては無視されます。

pty
以前restrictオプションによって禁止されていた端末の割り当てを許可します。

restrict
すべての制限を有効にします。つまり、ポート転送・認証エージェント転送および X11 転送を禁止し、仮想端末の割り当てと~/.ssh/rcの実行も禁止します。将来、authorized_keys ファイルにこれ以外の制限機能が加えられた場合、それらも有効になります。

tunnel=n
サーバ側のtun (4) デバイスを強制的に指定します。このオプションがない場合、クライアントがトンネリングを要求すると、現在の次に使用可能なデバイスが使われます。

user-rc
以前restrictオプションで禁止されていた~/.ssh/rcファイルの実行を許可します。

X11-forwarding
以前restrictオプションで禁止されていたX11転送を許可します。

authorized_keys ファイルの例:

# コメントをつけるときは行頭からssh-rsa AAAAB3Nza...LiPk== user@example.netfrom="*.sales.example.net,!pc.sales.example.net" ssh-rsaAAAAB2...19Q== john@example.netcommand="dump /home",no-pty,no-port-forwarding ssh-dssAAAAC3...51R== example.netpermitopen="192.0.2.1:80",permitopen="192.0.2.2:25" ssh-dssAAAAB5...21S==tunnel="0",command="sh /etc/netstart tun0" ssh-rsa AAAA...==jane@example.netrestrict,command="uptime" ssh-rsa AAAA1C8...32Tv==user@example.netrestrict,pty,command="nethack" ssh-rsa AAAA1f8...IrrC5==user@example.net

ssh_known_hosts ファイルの形式

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

これらの known_hosts ファイルの各行は次のような項目からなっています:マーカー (オプション)、ホスト名、ビット数、指数、係数 (modulus)、そしてコメント。各項目はスペースによって区切られています。

マーカーは必須ではありませんが、存在する場合は以下のいずれかになります:"@cert-authority"はこの行が認証局 (CA) の鍵であることを示します。また、"@revoked"は、この行の鍵は廃止されたものであり、以後決して許可されるべきでないことを示しています。ひとつの行に使えるマーカーは 1つだけです。

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

もうひとつの形式として、各ホスト名はハッシュされた形式で格納されていることもあります。これは、万が一そのファイルが見られた時でも、そのホスト名や IP アドレスが識別できないようにするためです。ハッシュされたホスト名は | 文字から始まります。各行はハッシュされたホスト名をひとつだけ持ち、これらに上記の否定表現やワイルドカード演算子を適用することはできません。

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

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

ホスト間認証をおこなう際、どれか適切な鍵をもった行がマッチすれば、認証は受け入れられます。この鍵と正確に一致しているか、あるいはサーバが認証用の証明書を提供している場合は、その証明書に署名した認証局 (CA) の鍵と一致している場合です。ある鍵が CA として信用されるためには、上記の"@cert-authority"マーカーを使う必要があります。

known_hosts ファイルはまた、対応する秘密鍵が盗まれたりなどして廃止された鍵を指定するのに使うこともできます。廃止された鍵を指定する場合は"@revoked"マーカーをその鍵の行頭に指定します。この鍵は以後決して認証や認証局の鍵として受け入れられることはなく、かわりにが遭遇した場合には警告が表示されます。

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

注意。これらのファイルの各行は、ふつう何百文字もの長さになっています。もちろんこんなホスト鍵を手で入力したくはないでしょう。かわりにssh-keyscan (1) を使ったスクリプトで生成するか、/etc/ssh/ssh_host_key.pubをとってきてその先頭にホスト名をつけ加えるかしてください。ssh-keygen (1) では、~/.ssh/known_hostsを自動的に修正する機能をいくつか提供しています。たとえばあるホスト名の鍵を除去するとか、すべてのホスト名をハッシュ表記に置き換えるといったことです。

ssh_known_hosts の例:

# コメントをつけるときは行頭からclosenet,...,192.0.2.53 1024 37 159...93 closenet.example.netcvs.example.net,192.0.2.10 ssh-rsa AAAA1234.....=# ハッシュされたホスト名|1|JfKTdBh7rNbXkVAQCRp4OQoPfmI=|USECr3SWf1JUPsms5AqfD5QfxkM= ssh-rsaAAAA1234.....=# 廃止された鍵+@revoked * ssh-rsa AAAAB5W...# CA鍵、 *.mydomain.com または *.mydomain.org のどのホストでも許可される@cert-authority *.mydomain.org,*.mydomain.com ssh-rsa AAAAB5W...

関連ファイル

~/.hushlogin
このファイルがあると、PrintLastLogおよびPrintMotdがそれぞれ許可されている場合でも最終ログイン時刻と/etc/motdファイルの表示はされなくなります。しかしBannerによって指定されているバナーはかならず表示します。

~/.rhosts
このファイルはホストベースド認証 (host-based authentication-- 詳しくはssh (1) を参照) で使われます。sshd はこのファイルを root として読むため、ユーザのホームディレクトリが NFS 上にある場合、マシンによっては、このファイルは誰にでも読めるようにしておく必要があるかもしれません。

~/.shosts
このファイルは.rhostsとまったく同じように扱われます。しかしこれは rlogin/rsh から使われることなくホストベースド認証を許可することができます。

~/.ssh/
このディレクトリはユーザ用のすべての設定や認証用の情報が入るデフォルトの場所です。一般的に、このディレクトリの内容をまるごと隠しておくという必要があるわけではありませんが、推奨されるパーミッションは、所有者に対しては read/write/execute を許可し、他の人にはアクセスさせないようにしておく、というものです。

~/.ssh/authorized_keys
そのユーザのアカウントでログインするときに使われる公開鍵 (DSA, ECDSA, Ed25519, RSA) の一覧が入っています。このファイルの形式は上で説明されています。このファイルの内容はそれほど秘密にする必要はありませんが、推奨されるパーミッションは、その所有者のみが読み書き可能で、それ以外の人には読めないようにしておくというものです。

このファイル本体、あるいは~/.sshディレクトリ、あるいはそのユーザのホームディレクトリに対して他のユーザが書き込み可能になっている場合、権限のないユーザでもこのファイルを変更あるいは置き換えることができていまいます。このような場合、sshdStrictModesが"no"に設定されていない限り、このファイルの内容を使用しません。

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

~/.ssh/known_hosts
そのユーザがこれまでにログインしたすべてのホストのホスト鍵で、システム全体で使われる /etc/ssh/ssh_known_hosts の一覧に含まれていないものが格納されています。このファイルの形式は上で説明されています。これらのファイルは root や所有者にのみ書き込み可能にしておくべきですが、誰にでも読めるようにしておく必要はありません。

~/.ssh/rc
ユーザのホームディレクトリがアクセス可能になる前に実行すべき初期化作業が格納されています。このファイルの形式は上で説明されています。これらのファイルは所有者にのみ書き込み可能にしておくべきです。誰にでも読めるようにしておく必要はありません。

/etc/hosts.equiv
このファイルはホストベースド認証 (host-based authentication-- 詳しくはssh (1) を参照) で使われます。このファイルは root のみ書き込み可能にしておくべきです。

/etc/moduli
Diffie-Hellman 鍵交換 (Diffie-Hellman Group Exchange) で使われる、Diffie-Hellman 群を格納します。このファイルの形式はmoduli (5) で説明されています。このファイル中に利用可能な群がない場合、内部の固定値が使われます。

/etc/motd
motd (5) を参照してください。

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

/etc/shosts.equiv
これはhosts.equivとまったく同じように扱われます。しかしこれは rlogin/rsh から使われることなくホストベースド認証を許可することができます。

/etc/ssh/ssh_host_key

/etc/ssh/ssh_host_dsa_key

/etc/ssh/ssh_host_ecdsa_key

/etc/ssh/ssh_host_ed25519_key

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

/etc/ssh/ssh_host_key.pub

/etc/ssh/ssh_host_dsa_key.pub

/etc/ssh/ssh_host_ecdsa_key.pub

/etc/ssh/ssh_host_ed25519_key.pub

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

/etc/ssh/ssh_known_hosts
システム全体で使われるホスト鍵の一覧です。このファイルはシステム管理者によって用意され、その組織のすべてのマシンのホスト鍵を含んでいるべきです。このファイルの形式は上で説明されています。これらのファイルは root や所有者にのみ書き込み可能にしておくべきであり、誰にでも読めるようになっている必要があります。

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

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

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

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

関連項目

scp (1), sftp (1), ssh (1), ssh-add (1), ssh-agent (1), ssh-keygen (1), ssh-keyscan (1), chroot (2), login.conf (5), moduli (5), sshd_config (5), inetd (8), sftp-server (8)

作者

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 が特権分離のサポートに貢献しました。