ProxyCommandを使用して複数のホストを介してSSHしますか?


11

自宅のコンピューターの〜/ .ssh / configに次のようなエントリがあります。

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

gateway.example.comパブリックインターネットと内部ネットワークの両方に接続されている職場のサーバーはどこにありますか。ゲートウェイボックスは、/ etc / hostsのエントリを使用してfooとbarを解決します。

私の問題は、私が反対側にある箱に到達する必要があるということですfoo。それを「baz」と呼びましょう。「baz」ホストは、fooが接続されている別のプライベートネットワーク上にありますが、「gateway」が接続されているものではありません。

私はこれを使ってみました:

host baz
    ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22

しかし、それはうまくいきません。私は少し深みがありません。どうすればいいですか?

私はそれが問題になるとは思いませんが、Ubuntu 10でこれをやっています。

回答:


13

簡単です。

次のネットワーク設定を想定します。

ネットワーク設定の例

次のような〜/ .ssh / configファイルを使用できるはずです。

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

host baz
    ProxyCommand ssh -x -a -q foo nc %h 22

ここでのアイデアは、SSH 「foo」に到達する方法を知っているので、そこでSSHが成功するということです。そしてそこから、「nc」でbazに移動できます。また、内部プライベートネットワーク上に「baz」と並んで他のホストがある場合は、それらを「host baz」行に追加するだけです。

これは基本的に、「ゲートウェイ」が「foo」へのゲートウェイであるように、ホスト「foo」を「baz」へのゲートウェイとして扱います。

晴れ?


13

ghotiの答えに関して:"ssh ... nc %h 22"OpenSSH 5.4以降では、netcat()を使用する代わりに、これを直接行うことができます"ssh -W %h:22 ..."。これにより、netcatが適切な場所にインストールされているかどうかを心配する必要がなくなります。


1
素晴らしい点、ありがとう。これは古い質問ですが、ワークステーションでUbuntuを実行しているとき、サーバー「ゲートウェイ」はOpenSSH 5.3を備えた古いBusybox Linuxであり、サーバー「foo」と「baz」はFreeBSD(OpenSSH 5.4)。とにかく、少なくとも1つのnetcatが必要でした。
グラハム

@Grahamいいえ-W。動作するために5.4以上である必要があるのはクライアントだけです。サーバー側のポート転送コードに依存していますが、これははるかに古いものです。
カスペルド

1

ローカルコンピューターに保存された秘密キーを使用して、プライベートキーパス、シェルユーザー名、およびホスト名/ IPアドレスをlocal-> gateway-> destination sshのニーズに変更してこのコマンドを入力します。

ゲートウェイ/ジャンパーボックスがルートハイジャックされている場合、プライベートキー認証を侵害するリスクを軽減するために、プロキシフォワーディングがエージェント転送よりも優先されることに注意してください(ゲートウェイとローカルsshエージェント接続を使用して、ハイジャック犯がプライベートキーを持っているかのようにホストを侵害します)。

SSHをサーバーにプロキシする単一コマンド(ローカルコンピューターに両方の秘密キーを保持):

sudo ssh -i dest_private_key.pem -o "ProxyCommand ssh -W %h:%p -i gate_private_key.pem gate_user@gate_IP" dest_user@dest_IP 

0

これは、保護されたネットワークからインターネットに飛び出すために私がすることです。

buildでコードを操作するためにラップトップを使用しています。以来、ビルドにジャンプする必要性私は最初、github.comからレポのクローンを作成するために、インターネット・アクセスから制限されているツールボックスのいずれかのインターネット・アクセスを持っていません、。ただし、インターネットを備えたgwにはアクセスできます。

このような:

SSHジャンプ回路図

.ssh/configビルド

Host gw
  ProxyCommand ssh -A -W %h:%p toolbox

Host github.com
  ProxyCommand ssh -A -W %h:%p gw

説明。

  1. 視点はbuildからのものです。他のサーバーには構成はありません。
  2. まず、gwに到達するには、toolboxを介してそれを行う必要があることを宣言します。
  3. 第二に、github.comにアクセスするには、gwを介してそれを行う必要があることを宣言します。内部的にSSHは前のルールを使用します。
  4. 最終的には、git clone git@github.com:aRepo/Thereただ動作します!

晴れ?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.