私はSSHトンネルを初めて使いますが、OpenSSH プロキシのウィキブック何度も繰り返しますが、まだ混乱しています。
目標は、SSH トンネル (ポート転送) または ProxyJump (何と呼ぶべきかよくわかりません) のみを使用した二重プロキシを構築することです。
たとえば、me 192.168.1.1
-->connect to--> とするthe Jump ServerA 1.1.1.1
と、実際には に到達しますがthe Target ServerB 2.2.2.2
、 でSOCKS5プロキシを設定するとServerA 1.1.1.1
、最終的には によってプロキシされます。ServerB's IP 2.2.2.2
私は対処法を知っているme
>-から-> Server A
、でもどう対処したらいいのか分からないServer A
>-から-> Server B
(つまり、私はこれらのサーバーのすべてのアクセス権とルート権限を持っていますが、設定方法がわかりません。)
私は学習が遅いので、何かアイデアがあれば本当にありがたいです。
(この例の正確なコマンドやアプローチを投稿していただいても構いません。非常に役立ちます)
答え1
基本的な要件は次のとおりです。
- ServerB は ServerA からのみアクセス可能である必要があります。直接接続しないでください。
- ServerA では TCP トンネリングを有効にする必要があります。
- ServerA はユーザーからアクセス可能である必要があります。
ジャンプホストを介して ServerB への接続を設定します ( .ssh/config
)。
Host ServerB
ProxyJump ServerA
これは、 を入力するとssh ServerA
ServerA に行き着き、ServerA にいるときに を入力するとssh ServerB
ServerB に行くことを前提としています。たとえば、「ServerB」という名前は ServerA で解決可能である必要がありますが、自分の側で解決可能であるかどうかは関係ありません。これらはホスト名または「スラッグ」(ニックネーム) である可能性があります。後者の場合、 でホスト名または IP アドレスを再度関連付けます.ssh/config
。
Host ServerA
HostName ip.add.re.ss
Host ServerB
ProxyJump ServerA
HostName host.na.me
プロキシ ホストに使用するユーザー名を指定することもできます。
Host ServerA
User proxyuser
HostName ip.add.re.ss
Host ServerB
ProxyJump ServerA
HostName host.na.me
その後、 と入力しますssh ServerB
。OpenSSH は ServerA に接続し、ランダムなポートを使用して、この接続を介して ServerB のアドレス (ポート 22) に転送します。この接続はバックグラウンドに分岐され、OpenSSH はすぐにこのランダムに転送されたポート (localhost に接続しますが、実際には、.ssh/known_hosts
HostName で指定された名前 "ServerB" と IP アドレス (存在する場合) に対してキーをチェックします) に接続します。そのため、直接 ServerB に接続されます。"who" を発行すると、ServerA アドレスから接続していると表示されます。あなたと ServerA の間にいる人は、あなたが実際に ServerB と通信していることを知る方法がありません。
SSHコマンドラインオプションはどれでも使用できます。サーバーB接続 (転送されたポート経由で行われます)。たとえば、 を使用するとssh -D 12345 user@ServerB
、ポートが ServerB:22 に転送されたプロキシユーザーとして ServerA に接続し、そのポートに接続してユーザーとして ServerB に認証し、ポート 12345 に SOCKS5 プロキシをインストールします。その SOCKS5 の終了アドレスは ServerB になります。たとえば、そのプロキシを使用すると (ブラウザーなどで)、リモート側では ServerB のアドレスから接続していることがわかります。
ジャンプホストをさらに積み重ねることもできます。これも機能します:
Host ServerB
ProxyJump ServerA
Host ServerC
ProxyJump ServerC
まず、ssh ServerC
ServerB:22 へのポート転送で ServerA に接続し、次にその転送を介して ServerB に接続し、別のポート転送で ServerC に接続し、さらにその別のポートに接続すると、ServerC シェルに接続されます。
パスワードの入力を求められるので注意してくださいそれぞれ接続。これはかなり面倒です。キーベースの認証を設定して使用する方がよいでしょうssh-agent
。