SSH 構成ファイルを使用すると、SSH ホストごとに特定の設定を定義でき、そのホストへの接続がはるかに簡単になります。ファイル内でこれらの一般的または一般的ではないプロパティの多くを定義することにより、接続が必要になるたびにこのパラメータ セットを覚えておく必要がなくなります。
SSH接続の定義
ファイルの場合は、
~ /.ssh/ config
が存在しない場合は、今すぐ作成してください。通常、このファイルは
.ssh
の「隠し」ディレクトリに存在します。これが隠されているのは、ほとんどのオペレーティング システムでは先頭に「.ssh」が付いたディレクトリが表示されないためです。
.
。また、このディレクトリは通常、自分のホーム ディレクトリ、または ssh を実行しているユーザーのホーム ディレクトリにあります。
~
ホームディレクトリを示す表記です。
.ssh
フォルダー内のアクセス許可に注意することが重要です。ほとんどの SSH クライアントは、ファイルをモードにすることを望んでいます。
600
このフォルダー内にあります。 Linux 用 Windows サブシステムからこのフォルダーを参照する場合は、次のことを確認する必要があります。
chmod 600 ~\ .ssh \*
では、このファイルでは単純な SSH 接続はどのように見えるのでしょうか?簡単な構成の例を以下に示します。
Host my-ssh-host
HostName 10 .0 .0 .5
Port 22
User myuser
上記の構成からわかるように、これはできる限り基本的なものです。実際、
22
デフォルトの SSH ポートであるため、厳密には必要ではないため、ポートを省略できます。この接続を定義すると、コマンド ラインで次の操作を簡単に行うことができます。
ssh my-ssh-host
SSH 接続は保護されていないべきであるため、通常、接続ではパスワードの入力を求められます。
公開鍵/秘密鍵
世にあるほとんどすべての SSH チュートリアルやセットアップ ガイドは、通常、ある時点で公開キー/秘密キーを参照します。これらは、SSH 接続をセットアップするための推奨される方法です。ハッキングや推測が可能なパスワードの代わりに、実際にキー ファイルを取得する必要があります。このチュートリアルでは、それらの作成方法については説明しません。そのため、セットがすでに存在し、適切にセットアップされていると仮定します。このファイルを使用するようにホスト構成に指示するにはどうすればよいでしょうか?
Host my-ssh-host
HostName 10 .0 .0 .5
Port 22
User myuser
IdentityFile ~ /.ssh/i d_ed25519_myuser
IdentitiesOnly yes
ここで紹介した新しいコマンドが 2 つあります。
IdentityFile
および
IdentitiesOnly
コマンド。まず、キー ファイルの場所を SSH に伝える必要があります。この場合、ファイルは
.ssh
ディレクトリに保存されています (アクセス許可に注意してください)。次に、
IdentitiesOnly
という名前のタグを定義しました。これにより、SSH は、そのフォルダー内のすべての ID ファイルを試行するのではなく、定義されている ID ファイルのみを試行するように指示されます。デフォルトでは、SSH は正しいファイルが見つかるまですべての ID ファイルをウォークスルーして試行します。多くの場合、ID が多数ある場合、ターゲット サーバー上で「ユーザー myuser の認証失敗が多すぎます」という問題が発生します。
複雑な構成
この記事で取り上げられるシナリオはたくさんありますが、一般的で役立つシナリオをいくつか取り上げてみましょう。
フォワードエージェント
ターゲット サーバーへの SSH 接続を開いた後、その元のターゲット サーバーから 2 番目のサーバーへの別の SSH 接続を確立する必要があるというシナリオがある場合はどうすればよいでしょうか?このネクスト ホップを行うには、同じ SSH キーをターゲット サーバーに保存する必要があると考えるかもしれません。
ForwardAgent
という適切な名前のコマンドがあります。このコマンドを使用すると
、SSH エージェント キー転送を設定する
ことで、ホップ内の次のサーバーにローカル キーを「転送」できます。
Host my-ssh-host
HostName 10 .0 .0 .5
Port 22
User myuser
IdentityFile ~ /.ssh/i d_ed25519_myuser
IdentitiesOnly yes
ForwardAgent yes
プロキシジャンプ
ForwardAgent
と同様に、多くの場合、最初 (または 2 番目) のターゲットを介して直接セカンダリ SSH 接続を開く必要があります。多くの場合、これは、マシンがファイアウォールで一般のインターネットから遮断されているにもかかわらず、「ジャンプ ボックス」に接続されており、ファイアウォールで囲まれたサーバー上で接続を開くことができるためです。 SSH バージョン 7.3 以降では、
ProxyJump
コマンドを使用してこれを簡単に実行できるようになりました。
Host my-ssh-host
HostName 10 .0 .0 .5
Port 22
User myuser
IdentityFile ~ /.ssh/i d_ed25519_myuser
IdentitiesOnly yes
ForwardAgent yes
ProxyJump myuser@10.0.0.6:22,myuser2@10.0.0.7:10005
上で見たように、ここには 2 つのサーバーがあります。最初に SSH 接続は
10.0.0.5
に進みますが、すぐに
10.0.0.6
への接続を開き、その後、最終的に別のユーザーとポートを使用して
10.0.0.7
への接続を開きます。
SSH サーバーが必ずロックダウンされていることを確認する 必要があることを指摘しておきます。
SSH プロキシ トンネル
SOCKSv5 トンネルを設定する必要がある場合はどうすればよいでしょうか?これは、構成ファイルを使用することで非常に簡単に行えます。ここでは、
DynamicForward
、
ControlMaster
、および
ControlPath
という 3 つの新しいコマンドを導入します。
Host my-ssh-host
HostName 10 .0 .0 .5
Port 22
User myuser
IdentityFile ~ /.ssh/i d_ed25519_myuser
IdentitiesOnly yes
DynamicForward 8080
ControlMaster auto
ControlPath ~ /.ssh/ %r@%h:%p
DynamicForward
コマンドは、ポート
8080
など、SSH 接続を介して実際にプロキシすることを検討しているポートです。
ControlMaster
auto
に設定されています。これは、接続が存在する場合はそれを使用しますが、存在しない場合は新しい接続を作成することを意味します。最後に、
ControlPath
は実際のソケット ファイルの場所を設定します。この場合、
%r@%h:%p
という命名形式が使用されており、この接続の場合では
myuser@10.0.0.5:22
に対応します。
結論
SSH 構成ファイルには多くの機能があります。単一の場所内で多数の異なるホストを簡単に定義できることに加えて、はるかに複雑な例を定義できます。そうすることで、ホスト接続が十分に文書化されるだけでなく、コマンド ラインから迅速かつ簡単にアクセスできるようになります。このファイルをバージョン管理下に置くことを選択すると、ホストの実行履歴を保持できる機能が追加され、将来の大きな問題を回避できる可能性があります。ご覧のとおり、SSH 構成ファイルを使用すると、SSH ホストの定義が簡単になります。





