Tools前書きSSH(セキュアシェル)は、リモート管理のためにLinuxホストに接続する最も一般的な方法です。単一のホストへの接続の基本はかなり単純ですが、多くのリモートシステムで作業を始めると、これは扱いにくくなり、はるかに複雑なタスクになる可能性があります。幸いなことに、OpenSSHでは、カスタマイズされたクライアント側の接続オプションを提供できます。これらは、ホストごとの値を定義するために使用できる構成ファイルに保存できます。これにより、各ホストで使用するさまざまな接続オプションを分けて整理したり、接続する必要があるときにコマンドラインで広範なオプションを提供したりする必要がなくなります。このガイドでは、SSHクライアント構成ファイルの基本について説明し、いくつかの一般的なオプションについて説明します。前提条件このガイドを完了するには、SSHに関する実用的な知識と、接続時に提供できるオプションのいくつかが必要です。少なくともテスト目的のために、一部のユーザーまたはホストに対してSSHキーベースの認証を構成することもできます。SSH構成ファイルの構造と解釈アルゴリズムローカルシステムの各ユーザーは、クライアント側のSSH構成ファイルを管理できます。これらには、コマンドラインで接続パラメーターを指定するために使用するオプションを含めることができます。これにより、共通の接続項目を保存し、接続時に自動的に処理できます。+`コマンドへの通常のフラグを通じて、接続時に設定ファイルで定義された値を上書きすることは常に可能です。+」設定ディレクトリ内にあります。多くの場合、このファイルはデフォルトでは作成されないため、自分で作成する必要があります。+`ファイルはホストごとに整理されています。各ホスト定義は、特定の一致するホストの接続オプションを定義できます。ワイルドカードを使用して、より広い範囲のオプションを許可することもできます。各セクションは、続く構成オプションに一致するホストを定義するヘッダーで始まります。次に、一致するホストの特定の構成アイテムを以下に定義します。ホストは未定義のアイテムのデフォルトを継承するため、デフォルト値と異なるアイテムのみを指定する必要があります。+`ヘッダーまで定義されます。通常、組織上の目的と読みやすさのために、各ホストに設定されているオプションはインデントされています。これは厳しい要件ではありませんが、一目で簡単に解釈できる便利な規則です。一般的な形式は次のようになります。*ここでは、問題のホストが一致するかどうかに応じて、各接続試行に適用される4つのセクションがあります。解釈アルゴリズムSSHがファイルを解釈して、内部で定義された構成値を適用する方法を理解することは非常に重要です。+」汎用ホスト定義を使用する場合に大きな意味を持ちます。+`ヘッダーと一致させます。これはファイルの先頭から下に向かって行われるため、順序は非常に重要です。+`定義のパターンが、接続する実際のホストと一致する必要がないことを指摘する良い機会です。基本的にこれらの定義を使用して、実際のホスト名の代わりに使用できるホストのエイリアスを設定できます。次の定義を検討してください。protected]+」として接続できます。develこれを念頭に置いて、SSHがファイルを下に移動するときに各構成オプションを適用する方法について説明することができます。+`定義をチェックして、コマンドラインで指定された値と一致するかどうかを確認します。+`定義が見つかると、関連付けられた各SSHオプションが今後の接続に適用されます。解釈はここで終わりません。+`定義も一致するかどうかを確認します。コマンドラインで指定された現在のホスト名と一致する別の定義が見つかった場合、新しいセクションに関連付けられたSSHオプションが考慮されます。次に、*前のセクションでまだ定義されていない*新しいセクションに定義されたSSHオプションを適用します。この最後のポイントは、内部化するために非常に重要です。+`セクションを順番に解釈します。このプロセスでは、各オプションに指定された_first_値が常に使用されます。以前に一致したセクションによって既に指定された値をオーバーライドする方法はありません。+`ファイルが最も具体的な設定を上部に持つという単純なルールに従うべきであることを意味します。以前の一致するセクションで定義されていなかったオプションを適用するために、より一般的な定義を後で行う必要があります。+」ファイルをもう一度見てみましょう。*ここでは、最初の2つのセクションがリテラルホスト名(またはエイリアス)によって定義されていることがわかります。ワイルドカードを使用していません。`を使用して接続する場合、最初のセクションが最初に適用されます。2番目のセクションをチェックし、一致しないことを確認して先に進みます。次に、3番目のセクションを見つけ、一致することを見つけます。`をチェックして、前のセクションの値がすでにあるかどうかを確認します。ない場合は、このセクションの値が適用されます。`定義はすべての接続に一致するため、最後のセクションに一致します。+`オプションの値がないため、このセクションの値を使用します。その後、このプロセスから収集されたオプションを使用して接続が確立されます。+`を呼び出すふりをして、これをもう一度試してみましょう。繰り返しますが、最初のセクションから開始し、一致するかどうかを確認します。`への接続にのみ一致するため、このセクションはスキップします。2番目のセクションに進みます。+`の値を収集します。次に、SSHは3番目の定義を調べて、ワイルドカードが現在の接続と一致することを見つけます。+`の値が既にあるかどうかを確認します。このオプションはすでに一致した2番目のセクションで定義されているため、3番目のセクションの値は削除され、効果はありません。次に、SSHは4番目のセクションをチェックし、以前に一致したセクションで定義されていないオプションを適用します。次に、収集した値を使用して接続を試行します。基本的な接続オプション構成ファイルを設計する際に使用する一般的な形式について理解できたので、いくつかの一般的なオプションと、それらをコマンドラインで指定するために使用する形式について説明します。最初に説明するのは、リモートホストに接続するために必要な基本情報です。SSHデーモンが実行されているホスト名、ユーザー名、およびポート。+」という名前のユーザーとして接続するには、さまざまな方法で変数情報を指定できます。一般的なものはおそらく次のとおりです。+`フラグを使用することもできます。`フラグで設定しました。上記で説明したように、設定ファイルでできるように、ホストをエイリアスとして「anything」として指定しました。+`オプションから取得されます。+`ファイルで使用する必要があるものと同じです。次のように入力すると、使用可能なオプションの完全なリストを見つけることができます。+`ファイルでこれらを設定するには、まずこれらのオプションを使用するホストを決定する必要があります。問題のホストに固有のオプションについて説明しているので、おそらくリテラルホストの一致を使用する必要があります。この時点で、この接続のエイリアスを割り当てる機会もあります。それを活用して、ホスト名全体を毎回入力する必要がないようにします。エイリアス「home」を使用して、この接続と関連オプションを参照します。homeこれで、このホストの接続の詳細を定義できます。上記で使用した2番目の形式を使用して、このセクションに何を入れるべきかを通知できます。4567キーと値のシステムを使用してオプションを定義します。各ペアは別々の行にある必要があります。キーは、空白、またはオプションの空白を含む等号によって、関連付けられた値から分離できます。したがって、これらはすべて、SSHクライアントによって解釈されるものと同一です。4567唯一の違いは、オプションと値に応じて、スペースなしで等号を使用すると、引用符なしでコマンドラインでオプションを指定できることです。+`ファイルに焦点を合わせているので、これはあなたの好み次第です。共有オプションの構成これまでのところ、設計した構成は非常に単純です。全体として、次のようになります。次のように作業マシンを定義するセクションで冗長オプションを追加できます。apolloこれは機能しますが、値を繰り返しています。これは単一のオプションであるため、大したことではありませんが、多くのオプションを共有したい場合があります。そのための最善の方法は、共有オプションを個別のセクションに分割することです。+」でマークされた汎用の「ホスト」定義にこれを配置できます。一般的なセクションは、さらに下に行く必要があることに注意してください。apolloこれにより、設定の繰り返しの問題が解消され、「apollo」が接続するほとんどの新しいシステムのデフォルトのユーザー名である場合に機能します。ユーザー名がどれだけ広く共有されているかに応じて、これにアプローチできるいくつかの異なる方法があります。+」セクションに残しておくことをお勧めします。これは、上記のセクションからユーザー名を受け取っていないホストに適用されます。別のユーザー名を使用する異常なマシンの場合、代替を提供することでデフォルトをオーバーライドできます。これは、ジェネリックセクションの前に定義されている限り優先されます。`ホストの場合、SSHはユーザー名「zeus」を使用して接続します。+`定義に到達するまでユーザー名を受け取りません。使用しているエイリアスの名前をより一般的な形式に変更する場合は、ワイルドカードを使用して、これら2つのホストだけに追加オプションを適用できます。`のようなものに変更できます。+」部分を共有し、ワイルドカードを使用して別のセクションでターゲットを設定できます。`で終わるホストに接続しようとするSSH接続に一致するホストセクションに移動しました。default」を受け取ります。このファイルでは、最も具体的なものから最も具体的なものへの順序を保持していることに注意してください。ファイルが解釈される順序に起因するデフォルトではなく、特定性の低いホストセクションをフォールバックと考えるのが最善です。一般的なSSH設定オプションこれまで、接続を確立するために必要ないくつかの基本的なオプションについて説明してきました。これらのオプションについて説明しました。*:接続の確立に使用される実際のホスト名。`ヘッダーで定義されたエイリアスを置き換えます。+`定義が接続する実際の有効なホスト名を指定している場合、このオプションは必要ありません。ユーザー:接続に使用されるユーザー名。ポート:リモートSSHデーモンが実行されているポート。このオプションは、リモートSSHインスタンスがデフォルトのポート「22」で実行されていない場合にのみ必要です。探索する価値のある他の多くの便利なオプションがあります。機能に応じて分けられた、より一般的なオプションのいくつかについて説明します。+`セクションで、幅広いレベルで設定したいその他の微調整を以下に示します。*:このオプションは、サーバーからの応答をテストするためにパケットを送信するタイミングをSSHに知らせるように構成できます。これは、接続が信頼できず、接続がまだ使用可能かどうかを知りたい場合に役立ちます。*:これは、SSHがクライアント側でログオンする詳細レベルを設定します。これは、特定の状況でロギングをオフにしたり、デバッグしようとしたときに冗長性を高めたりするために使用できます。最小から最大まで、レベルはQUIET、FATAL、ERROR、INFO、VERBOSE、DEBUG1、DEBUG2、およびDEBUG3です。+`ファイルに自動的に追加するかどうかを設定します。デフォルトでは、これは「尋ねる」に設定されます。+`ファイルで見つかったものと一致しない場合に警告することを意味します。多数の一時的なホストに常に接続している場合は、これを「いいえ」に変更することをお勧めします。SSHは、ホストをファイルに自動的に追加します。これはセキュリティに影響する可能性があるため、有効にする前に慎重に検討してください。*:このオプションは、SSHが接続先のホストに関する情報を保存する場所を指定します。+」に設定することをお勧めします。*:このオプションは、接続時にリモートホストのキーのASCII表現を表示するようSSHに指示できます。これをオンにすると、ホストのキーを簡単に把握できるため、将来別のコンピューターから接続する必要がある場合に簡単に認識できます。*:圧縮をオンにすると、接続が非常に遅い場合に役立ちます。ほとんどのユーザーはこれを必要としません。上記の構成項目を念頭に置いて、いくつかの便利な構成調整を行うことができます。クラウドプロバイダーでホストを非常に迅速に作成および破棄する場合、次のようなものが便利です。120これにより、ホーム接続用のビジュアルホストキーがオンになり、慣れるので、変更するか、別のマシンから接続するかを認識できます。*で始まるホストをセットアップしました。他のホストについては、適切なフォールバック値があります。接続転送SSHの一般的な使用法の1つは、接続の転送です。これは、ローカル接続がリモートホストをトンネリングできるようにするか、リモートマシンがローカルマシンをトンネリングできるようにします。SSHは、リモートホストの転送情報を含むSOCKS5などのプロトコルを使用して動的転送を行うこともできます。この動作を制御するオプションは次のとおりです。*:このオプションは、ローカルポートのトラフィックをリモートマシンに転送し、それをリモートネットワークにトンネリングする接続を指定するために使用されます。最初の引数は、トラフィックを転送するローカルポートであり、2番目の引数は、トラフィックをリモートエンドに転送するアドレスとポートである必要があります。*:このオプションは、ローカルマシンからトンネリングするためにトラフィックを送信できるリモートポートを定義するために使用されます。最初の引数は、リモートシステム上のトラフィックが送信されるリモートポートである必要があります。2番目の引数は、ローカルシステムに到着したときにトラフィックを指すアドレスとポートである必要があります。*:これは、SOCKS5のような動的転送プロトコルで使用できるローカルポートを設定するために使用されます。動的転送プロトコルを使用するトラフィックは、ローカルマシンとリモートエンドのこのポートに向けられ、含まれている値に従ってルーティングされます。次のように、これらのオプションを使用して両方向にポートを転送できます。接続の転送に加えて、SSHは他のタイプの転送も可能にします。ローカルマシンのエージェントに保存されているSSHキーを転送して、ローカルシステムに保存されている資格情報を使用してリモートシステムから接続できます。リモートシステムでアプリケーションを起動し、X11転送を使用してグラフィカルシステムをローカルシステムに転送することもできます。これらは、これらの機能に関連付けられているディレクティブです。*:このオプションを使用すると、ローカルマシンに保存されている認証キーを接続先のシステムに転送できます。これにより、ホームキーを使用してホスト間をホップできます。*:リモートシステムで実行されているアプリケーションのグラフィカル画面を転送できるようにする場合は、このオプションをオンにできます。これらは両方とも「はい」または「いいえ」のオプションです。キーを指定するホストにSSHキーが構成されている場合、これらのオプションは各ホストに使用するキーの管理に役立ちます。*:このオプションを使用して、各ホストで使用するキーの場所を指定できます。キーがデフォルトの場所にある場合、それぞれが試行され、これを調整する必要はありません。それぞれが異なる目的に専念するキーが多数ある場合、これを使用して、正しいキーが見つかる正確なパスを指定できます。+`ファイルで提供されたIDのみに依存するように強制できます。これは、SSHエージェントのメモリに、問題のホストに対して無効な代替キーがある場合に必要になることがあります。これらのオプションは、さまざまなホストの多数のキーを追跡し、1つ以上のSSHエージェントを使用して支援する必要がある場合に特に役立ちます。単一のTCP接続でのSSHの多重化SSHには、同じホストマシンへの複数のSSH接続に単一のTCP接続を使用する機能があります。これは、追加のSSH接続からこのオーバーヘッドを削除するため、リモートエンドへのTCPハンドシェイクの確立に時間がかかる場合に役立ちます。次のオプションを使用して、SSHで多重化を構成できます。*:このオプションは、可能な場合に多重化を許可するかどうかをSSHに指示します。+」セクションで「自動」に設定する必要があります。*:このオプションは、接続の制御に使用されるソケットファイルを指定するために使用されます。ファイルシステム上の場所にある必要があります。通常、これはSSH変数を使用して与えられ、ホストごとにソケットに簡単にラベルを付けます。*:このオプションは、最終的なSSH接続が閉じられた後、TCP接続が開いたままになる時間を秒単位で設定します。これを高い値に設定すると、最初の接続を閉じた後に新しい接続を開くことができますが、通常は未使用のTCP接続を開いたままにしないように「1」のような低い値に設定できます。通常、次のようなセクションを使用してこれを設定できます。1その後、ディレクトリが作成されていることを確認する必要があります。~/.ssh/multiplex特定の接続に多重化を使用しない場合は、次のようにコマンドラインで多重化を選択しないでください。今では、リモートホストへの接続に使用するオプションを大幅にカスタマイズできることは明らかです。SSHが値を解釈する方法を念頭に置いている限り、合理的なフォールバックで特定の値の豊富なセットを確立できます。