Linux / Unixコマンド:sshd

sshd - OpenSSH SSHデーモン

シノプシス

sshd [ -diqtD46 ] [ -b ビット ] [ -f config_file ] [ -g login_grace_time ] [ -h host_key_file ] [ -k key_gen_time ] [ -o オプション ] [ -p port ] [ -u len ]

説明

sshd (SSH Daemon)はssh(1)のデーモンプログラムです。 一緒にこれらのプログラムはrloginを置き換えます 安全でないネットワーク上の2つの信頼できないホスト間で安全な暗号化通信を提供します。 このプログラムは、インストールと使用が可能な限り容易になるように設計されています。

sshdは、クライアントからの接続をリスンするデーモンです。 これは通常、/ etc / rcから起動時に起動され、着信接続ごとに新しいデーモンを作成します。 フォークされたデーモンは、鍵交換、暗号化、認証、コマンド実行、およびデータ交換を処理します。 このsshdの実装は、SSHプロトコルバージョン1と2の両方を同時にサポートします。

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

各ホストには、ホストを識別するためのホスト固有のRSAキー(通常は1024ビット)があります。 さらに、デーモンが起動すると、サーバーのRSAキー(通常は768ビット)が生成されます。 このキーは、通常、使用されている場合は1時間ごとに再生成され、ディスクに保存されることはありません。

クライアントが接続するたびに、デーモンはその公開ホストとサーバーキーで応答します。 クライアントは、RSAホスト鍵とそれ自身のデータベースを比較して、変更されていないことを確認します。 次に、クライアントは256ビットの乱数を生成します。 ホスト鍵とサーバ鍵の両方を使用してこの乱数を暗号化し、暗号化された番号をサーバに送信します。 両者は、この乱数をセッション鍵として使用します。セッション鍵は、セッション内の以降のすべての通信を暗号化するために使用されます。 残りのセッションは、デフォルトで3DESが使用されている従来の暗号(現在はBlowfishまたは3DES)を使用して暗号化されています。 クライアントは、サーバーが提供する暗号化アルゴリズムから使用する暗号化アルゴリズムを選択します。

次に、サーバーとクライアントが認証ダイアログを表示します。 クライアントは、.rhosts認証、RSAホスト認証、RSA挑戦応答認証、またはパスワードベース認証と組み合わせた.rhosts認証を使用して、自身を認証しようとします

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)認証方法、従来のパスワード認証、およびチャレンジレスポンスベースの方法を提供します。

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

クライアントが正常に認証されると、セッションを準備するためのダイアログが表示されます。 この時点で、クライアントは疑似ttyの割り当て、X11接続の転送、TCP / IP接続の転送、またはセキュアなチャネルを介した認証エージェント接続の転送などを要求することがあります。

最後に、クライアントはコマンドのシェルまたは実行を要求します。 側面はセッションモードに入ります。 このモードでは、いずれの側でもいつでもデータを送信することができ、そのようなデータは、サーバー側のシェルまたはコマンド、およびクライアント側のユーザー端末に転送されます。

ユーザープログラムが終了し、転送されたすべてのX11および他の接続が閉じられたとき、サーバーはコマンド終了ステータスをクライアントに送信し、両側が終了します。

sshdは、コマンドラインオプションまたは設定ファイルを使用して設定できます。 コマンドラインオプションは、設定ファイルで指定された値を上書きします。

sshdは、ハングアップシグナルを受け取ったときに設定ファイルを読み直します.SIGHUPは、起動した名前、つまり/ usr / sbin / sshd

オプションは次のとおりです。

-b ビット

エフェメラルプロトコルバージョン1のサーバーキー(デフォルトは768)のビット数を指定します。

-d

デバッグモード。 サーバーは冗長なデバッグ出力をシステムログに送信し、バックグラウンドには置かない。 サーバーも機能せず、1つの接続のみを処理します。 このオプションは、サーバーのデバッグを目的としています。 複数の-dオプションはデバッグレベルを上げます。 最大値は3です。

-e

このオプションを指定すると、 sshdは出力をシステムログではなく標準エラーに送信します。

-f configuration_file

構成ファイルの名前を指定します。 デフォルトは/ etc / ssh / sshd_configです。設定ファイルがない場合、 sshdは起動を拒否します。

-g login_grace_time

クライアントが自分自身を認証するための猶予時間を与えます(デフォルトは120秒)。 クライアントがこの数秒間にユーザーの認証に失敗すると、サーバーは接続を切断して終了します。 ゼロの値は無制限を示します。

-h host_key_file

ホスト鍵が読み込まれるファイルを指定します。 sshdがrootとして実行されていない場合(通常は、通常のホスト鍵ファイルはroot以外の誰かが読むことができないため)、このオプションを指定する必要があります。 デフォルトは、プロトコルバージョン1の場合は/ etc / ssh / ssh_host_key、プロトコルバージョン2の場合は/ etc / ssh / ssh_host_rsa_keyおよび/ etc / ssh / ssh_host_dsa_keyです。異なるプロトコルバージョンおよびホスト鍵用に複数のホスト鍵ファイルを持つことができますアルゴリズム。

-私

sshdがinetdから実行されることを指定します。 sshdはクライアントに応答する前にサーバ鍵を生成する必要があるため、通常はinetdから実行されません。これには数十秒かかることがあります。 キーが毎回再生された場合、クライアントは長時間待たなければなりません。 しかし、inetdからのsshdを使用する小さなキーサイズ(512など)で実現することができます。

-k key_gen_time

エフェメラルプロトコルバージョン1のサーバーキーを再生成する頻度を指定します(デフォルトは3600秒、または1時間)。 キーを再生成するという動機は、キーがどこにも格納されず、約1時間後に、マシンがクラックされたり物理的に押収されたとしても、インターセプトされた通信を解読するためのキーを復元することが不可能になるということです。 0の値は、キーが決して再生成されないことを示します。

-o オプション

設定ファイルで使用される形式でオプションを与えるために使用できます。 これは、別々のコマンドラインフラグがないオプションを指定する場合に便利です。

-p ポート

サーバーが接続をリッスンするポートを指定します(デフォルトは22)。 複数のポートオプションが許可されています。 コマンドラインポートを指定すると、設定ファイルで指定されたポートは無視されます。

-q

静かなモード。 システムログには何も送信されません。 通常、各接続の開始、認証、および終了が記録されます。

-t

テストモード。 構成ファイルの有効性とキーの健全性だけをチェックしてください。 これは、設定オプションが変更される可能性があるため、 sshdを確実に更新するのに便利です。

-u len

このオプションは、リモートホスト名を保持するutmp構造体のフィールドのサイズを指定するために使用されます。 解決されたホスト名がlenよりも長い場合は、代わりにドット付き10進値が使用されます。 これにより、このフィールドをオーバーフローさせる非常に長いホスト名を持つホストは、依然として一意に識別されます。 -u0を指定すると、ドット付き10進アドレスのみをutmpファイルに入れる必要があります。 - u0は、認証メカニズムや設定で必要とされない限り、 sshdDNS要求を行うことを防ぐためにも使用されます。 DNSが必要な認証メカニズムには、 RhostsAuthentication RhostsRSAAuthentication HostbasedAuthenticationとキーファイル内のfrom = pattern-listオプションの使用が含まます。 DNSを必要とする設定オプションには、 AllowUsersまたはDenyUsersでUSER @ HOSTパターンを使用することが含まれます

-D

このオプションを指定すると、 sshdはデタッチされず、デーモンにもなりません。 これによりsshdの簡単な監視が可能になります

-4

sshdにIPv4アドレスのみを使用させます。

-6

sshdがIPv6アドレスだけを使用するようにします。

設定ファイル

sshdは/ etc / ssh / sshd_config(またはコマンドラインで-fで指定されたファイル)から設定データを読み込みます。 ファイル形式と設定オプションについては、sshd_config5を参照してください。

ログインプロセス

ユーザーが正常にログインすると、 sshdは次のことを行います。

  1. ログインがttyにあり、コマンドが指定されていない場合は、最後のログイン時刻と/ etc / motdを出力します(設定ファイルや$ HOME / .hushloginで禁止されている場合を除き、Sxファイルを参照)。
  2. ログインがtty上にある場合、ログイン時間を記録します。
  3. / etc / nologinが存在するかどうかをチェックし、内容を出力して終了します(root以外の場合)。
  4. 通常のユーザー権限で実行される変更。
  5. 基本的な環境を設定します。
  6. $ HOME / .ssh / environmentが存在し、ユーザーが環境を変更できる場合は、$ HOME / .ssh / environmentを読み取ります。 sshd_config5のPermitUserEnvironmentオプションを参照してください。
  7. ユーザーのホームディレクトリを変更します。
  8. $ HOME / .ssh / rcが存在する場合は、それを実行します。 そうでなければ/ etc / ssh / sshrcが存在し、それを実行します。 それ以外の場合はxauthを実行します。 `` rc ''ファイルには標準入力でX11認証プロトコルとクッキーが与えられます。
  9. ユーザーのシェルまたはコマンドを実行します。

Authorized_Keysファイル形式

$ HOME / .ssh / authorized_keysは、プロトコルバージョン1のRSA認証とプロトコルバージョン2の公開鍵認証(PubkeyAuthentication)のために許可されている公開鍵をリストするデフォルトファイルです。認証されたキーファイルを使用して代替ファイルを指定することができます。

ファイルの各行には1つのキーが含まれています(空行と `# 'で始まる行はコメントとして無視されます)。 各RSA公開鍵は、スペースで区切られた次のフィールドで構成されています:オプション、ビット、指数、モジュラス、コメント。 各プロトコルバージョン2の公開鍵は、オプション、keytype、base64で符号化された鍵、コメントで構成されます。 オプションフィールドはオプションです。 その存在は、行が数字で始まるかどうかによって決まります(オプションフィールドは決して数字で始まらない)。 ビット、指数、モジュラス、およびコメントフィールドは、プロトコルバージョン1のRSAキーを提供します。 コメントフィールドは何にも使用されません(ただし、ユーザーがキーを識別するのに便利な場合があります)。 プロトコルバージョン2では、keytypeは `` ssh-dss ''または `` ssh-rsa ''です

このファイルの行は、通常、公開鍵エンコーディングのサイズのために、数百バイトの長さであることに注意してください。 あなたはそれらを入力する必要はありません。 代わりに、identity.pub id_dsa.pubまたはid_rsa.pubファイルをコピーして編集します。

sshdは 、プロトコル1とプロトコル2のキーで768ビットのRSAキーモジュラスの最小サイズを強制します。

オプション(存在する場合)はカンマ区切りのオプション指定で構成されます。 二重引用符で囲まれた部分を除き、スペースは使用できません。 次のオプション指定がサポートされています(オプションキーワードは大文字と小文字を区別しません)。

from =パターンリスト

公開鍵認証に加えて、コンマで区切られたパターンのリスト( `* 'と`?'はワイルドカードとして機能する)にリモートホストの正規名が存在しなければならないことを指定します。 リストには、 `! 'の接頭辞を付けて否定されたパターンも含まれています。 ; 正規のホスト名がネゲートされたパターンと一致する場合、そのキーは受け入れられません。 このオプションの目的は、オプションでセキュリティを強化することです。公開鍵認証は、それ自身でネットワークやネームサーバなどを信用しません。 しかし、誰かが何らかの形で鍵を盗むと、鍵は侵入者が世界のどこからでもログインできるようにします。 この追加のオプションは、盗難された鍵の使用をより困難にします(鍵だけでなく、ネームサーバやルータを侵害する必要があります)。

コマンド=コマンド

このキーが認証に使用されるたびにコマンドが実行されることを指定します。 ユーザーが指定したコマンド(存在する場合)は無視されます。 クライアントがptyを要求した場合、コマンドはptyで実行されます。 それ以外の場合は、ttyなしで実行されます。 8ビットのクリーンチャネルが必要な場合は、ptyを要求してはいけません。また、 no-ptyを指定する必要があります。コマンドにバックスラッシュを付けて引用符を含めることもできます。 このオプションは、特定の操作を実行するために特定の公開鍵を制限するのに便利です。 たとえば、リモートバックアップを許可するキーがありますが、それ以外のものはありません。 明示的に禁止されていない限り、クライアントはTCP / IPおよび/またはX11転送を指定する場合があります。 このオプションは、シェル、コマンド、またはサブシステムの実行に適用されることに注意してください。

環境= NAME =値

このキーを使用してログインするときに文字列を環境に追加することを指定します。 このように設定された環境変数は、他のデフォルト環境値を上書きします。 このタイプの複数のオプションが許可されています。 環境処理はデフォルトでは無効になっており、 PermitUserEnvironmentオプションで制御されます。 UseLoginが有効な場合、このオプションは自動的に無効になります。

ポート転送なし

このキーを認証に使用すると、TCP / IP転送を禁止します。 クライアントからのポート転送要求は、エラーを返します。 これは、例えば、 コマンドオプションと関連して使用することができる。

no-X11-forwarding

このキーが認証に使用されたときのX11転送を禁止します。 クライアントによるすべてのX11転送要求はエラーを返します。

無エージェント転送

この鍵が認証に使用されたときの認証エージェントの転送を禁止します。

いいえ

ttyの割り当てを防ぎます(ptyの割り当て要求は失敗します)。

permitopen = host:port

ローカルの`` ssh -L ''ポート転送を、指定されたホストとポートにしか接続できないように制限する。 IPv6アドレスは、別の構文で指定できます。host / port複数のpermitopenオプションをカンマで区切って指定することができます。 指定されたホスト名に対してパターンマッチングは実行されません。リテラルドメインまたはアドレスでなければなりません。

1024 33 12121 ... 312314325 ylo@foo.bar

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

コマンド= "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ファイルには、既知のすべてのホストのホスト公開鍵が含まれています。 グローバルファイルは管理者が用意する必要があり(オプション)、ユーザーごとのファイルは自動的に保持されます。ユーザーが不明なホストから接続するたびにそのキーがユーザーごとのファイルに追加されます。

これらのファイルの各行には、ホスト名、ビット、指数、モジュラス、コメントの各フィールドが含まれています。 フィールドはスペースで区切られています。

ホスト名はカンマで区切られたパターンのリストです( '*'と '?'はワイルドカードとして動作します)。 各パターンは順番に正規のホスト名(クライアントの認証時)またはユーザー指定の名前(サーバーの認証時)と照合されます。 パターンの前に `! 'を付けることもできます。 否定を示すために:ホスト名がネゲートされたパターンと一致する場合、それはその行の別のパターンにマッチしたとしても(その行によって)受け入れられません。

ビット、指数、および係数は、RSAホストキーから直接取得されます。 例えば/etc/ssh/ssh_host_key.pubから取得することができます。オプションのコメントフィールドは、行末まで続き、使用されません。

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

ホスト認証を実行する場合、一致する行に適切なキーがある場合、認証が受け入れられます。 したがって、同じ名前に対して複数行または異なるホストキーを持つことは許されています(ただし、お勧めしません)。 これは必然的に、異なるドメインの短いホスト名がファイルに入れられたときに発生します。 ファイルに競合する情報が含まれている可能性があります。 いずれかのファイルから有効な情報が見つかると、認証が受け入れられます。

これらのファイルの行は、通常、数百文字の長さであり、実際にホスト鍵を手動で入力したくないことに注意してください。 むしろ、スクリプトや/etc/ssh/ssh_host_key.pubを使って生成し、ホスト名を先頭に追加します。

クローネネット、...、130.233.208.41 1024 37 159 ... 93 closenet.hut.fi cvs.openbsd.org、199.185.137.3 ssh-rsa AAAA1234 ..... =

関連項目

scp(1)、sftp(1)、ssh(1)、ssh-add1、ssh-agent1、ssh-keygen1、login.conf5、moduli(5)、sshd_config5、sftp-server8

T. Ylonen T. Kivinen M. Saarinen T. Rinne S. Lehtinen 「SSHプロトコルアーキテクチャ」 draft-ietf-secsh-architecture-12.txt 2002年1月作業中の資料

M. Friedl N. Provos WA Simpson 「SSHトランスポート層プロトコルのためのDiffie-Hellman Group Exchange」 draft-ietf-secsh-dh-group-exchange-02.txt 2002年1月の作業中の資料

重要: manコマンド( %man )を使用して、特定のコンピュータでコマンドがどのように使用されているかを確認してください。