ゲートウェイ サーバー ジャンプ バスティオン ホスト ローカル セットアップ

ゲートウェイ サーバー ジャンプ バスティオン ホスト ローカル セットアップ

中間サーバー (要塞、ジャンプ、ゲートウェイ) を使用してリモート プライベート ホストに SSH 接続したいです。次のコマンドは正常に動作します:

ssh gateway ssh private

この ~/.ssh/config 設定では:

Host gateway
  User gateway-user
  HostName XX.XX.XX.XX
  RequestTTY force

これを ~/.ssh/config に実装するにはどうすればよいでしょうか? ProxyCommand を何度も試してみましたが、うまくいきませんでした。ゲートウェイ ホストにある ID ファイルを使用してプライベート ホストにアクセスしたいと考えています。次の操作を実行できるようにしたいです。

ssh private

ここで説明されている手法は知っていますが、公開鍵をすべてのプライベート ホストに配置する必要がありますが、それは望んでいません。

http://www.lorrin.org/blog/2014/01/10/one-liner-ssh-via-jump-box-using-proxycommand/

答え1

まず、ゲートウェイで SSH キーを設定して、プライベートに SSH 接続できるようにします。次に、クライアントで、ゲートウェイでの認証に使用する別の秘密/公開キー ペアを作成します。例ssh-keygen -t rsa -f id_gateway:

次に、ゲートウェイでcommand=authorized_keys ファイルの構文を使用します。たとえば、エントリは次のようになります。

command="sh -c 'ssh private ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3....

詳細については、sshd のマニュアルページを検索してくださいcommand="command"。この行に id_gateway.pub キーを必ず追加してください。次に、.ssh/configクライアントで次のようなエントリを追加します。

Host private
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

これで、クライアントから にssh private直接アクセスできるようになります。これは および でも機能しscpますsftp

追加クレジット

これを複数のサーバーで使用したいが、ゲートウェイでは 1 つの公開キーのみを管理したい場合は、次のトリックを使用できます。sshdデフォルトでは、ローカル環境から特定の変数のみを受信できます。これらの 1 つは、LC_PAPERほとんど使用されない です。したがって、次のようにしてサーバーのホスト名を渡すために使用できます。

まず、公開鍵のエントリを次のように変更します。

command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...

次に、クライアントで、.bashrc次のような関数をファイル (または使用するシェル) に追加します。

ssh_proxy() {
  LC_PAPER=$1 /usr/bin/ssh $*
}

必要に応じてエイリアスを作成します。

alias ssh=ssh_proxy

最後に、上記のようなHostセクションを追加します.ssh/config。例:

Host private2
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

これで、ゲートウェイ上の 1 つの公開キーだけでssh private実行できるようになります。ssh private2

関連情報