it-swarm-ja.com

複数のホストまたは要塞を介したSSH

現在、通常の手順に従って、クラウドネットワーク内の各パブリックサブネットに要塞サーバーがあり、次の構成を介してそれにアクセスしようとしています-

Host webserverA
    User myuser
    Hostname 192.168.1.10
    ForwardAgent yes
    Port 22
    ProxyCommand ssh -q bastionA nc %h %p
    IdentityFile ~/webserver.pem

このモデルを別の要塞サーバーを持つように拡張する方法はありますか?

BastionB-> BastionA-> WebserverA?

その理由は、これを信頼の連鎖として扱いたいということです。かなり悪いイベントが発生したときに何かを削除します。

CoTとは、ユーザーのセットが離れた場合、最初のキーのセットを変更して、それ以上のアクセスをブロックできることを意味します。

4
A23

方法1-タマネギ(入れ子になったトンネル)

OpenSSH 7.3以降の場合:

Host webserverA
    ProxyJump bastionA,bastionB

コマンドラインからも同じです。

$ ssh -J bastionA,bastionB webserverA

あるいは(7.3でも; しないでくださいこれと上記を混ぜてください):

Host webserverA
    ProxyJump bastionB

Host bastionB
    ProxyJump bastionA

古いバージョンの場合–ほとんど同じです(ただし、ssh -vのようなオプションは自動的にコピーされません):

Host webserverA
    ProxyCommand ssh bastionB -W %h:%p

Host bastionB
    ProxyCommand ssh bastionA -W %h:%p

このメソッドは、すべての接続をローカルで開始し、各ステップへのssh -Wトンネルを設定します。したがって、認証はローカルで行われ(ForwardAgentおよびGSSAPIDelegateCredentialsは必要ありません)、ローカルの.ssh/configが各ステップにも適用されます。サーバー側では、-Wまたは-Lを使用する場合と同様に、基本的な「TCP転送」サポートのみが必要です。

ただし、SSHのSSHでSSHを実行することになるため、各レイヤーは余分なオーバーヘッドを追加します。

最も外側のホストを除く各ホストは、その直前のサーバーを介してProxyCommandを一覧表示することに注意してください。サーバーが3つある場合は、[webserverA via bastionC]、[bastionC via bastionB]、および[bastionB viabastionA]を使用します。

方法2–ホップバイホップ

Host webserverA
    ProxyCommand ssh bastionA -A ssh bastionB -W %h:%p

このメソッドは、ホップごとに接続を開始し、各ホップでsshを実行して、次のホップに接続します。したがって、ssh-agentとForwardAgentを有効にする必要があります(または、Kerberosを使用する場合はGSSAPIDelegateCredentials)。その他の特別な.ssh/config設定は、すべての要塞ホストにコピーする必要があります。

一方、プロトコルのオーバーヘッドは少なくなります(各ステップで最大2層)。

(編集:常にエージェント転送を要求するために-Aを追加しました。)

6
user1686