ネットワーク依存〜/ .ssh / config?


15

オフィスでは、プロキシなしで内部マシンに接続できますが、外部接続にはプロキシが必要です。オフィスの外では、プロキシなしで他の外部マシンに接続できますが、内部マシンに接続するには2つのプロキシのいずれかを使用する必要があります。

自分が現在いるネットワークを自動検出する方法を見つけられる場合、sshに適切な構成ファイルをロードするように指示できますか?

そうでない場合は、適切な構成ファイルを〜/ .ssh / configにシンボリックリンクするシェルスクリプトを書くよりもエレガントなソリューションがありますか?

編集:@pcmとJonnyRoは私の質問を理解したと思うので、彼らが示唆することを試してみますが、明確にするために、

|--------\    Dest   | abc.example.com | xyz.external.org |
| Source  \---------\|                 |                  |
|--------------------+-----------------+------------------|
| example.com office | No Proxy        | Proxy            |
| outside            | Proxy           | No Proxy         |

回答:


11

プロキシの構成方法に応じて、どちらの状況でも機能するSSH構成エントリを簡単に構築できます。たとえば、私が定期的に使用するネットワークでは、アウトバウンド接続を確立する前に中間ホストにsshする必要があります。したがって、基本的にこのような構成をセットアップします。

# proxy ssh 
Host *%sshproxy
    ProxyCommand ssh user@proxyhost.example.org /bin/netcat -w 1 $(echo %h | cut -d%% -f1) 22

Host myhost.example.org
    HostName 172.16.24.1

Host otherhost.example.com
    HostName 192.168.57.12

したがって、プロキシを使用する必要がない場合は、次のようなコマンドを実行してssh myhost.example.org接続するだけで済みますが、プロキシが必要な場合はcommandを実行しssh myhost.example.org%sshproxyます。

おそらく、何らかの%proxyビットを自動的に追加するエイリアスまたはオートコンプリート設定をセットアップできると思います。


8

古い質問ですが、このスレッドのいくつかのアイデアは私を助け、これは私が思いついた解決策です:

まず、プロキシサーバーの ssh設定。

Match Originalhost proxy Exec "ifconfig | grep 10.0.1"
     Hostname 10.0.1.2
Host proxy 
     Hostname external.hostname.com

次に、サーバーBの構成:

Match Originalhost server-b Exec "ifconfig | grep 10.0.1"
     ProxyCommand none
Host server-b
     Hostname 10.0.1.3
     ProxyCommand ssh -W %h:%p server-a

ここでの考え方は、デフォルトのケースは外部サイトからの接続であり、ProxyCommandは最初にプロキシへのssh接続を開始してからserver-bに接続するというものです。一方、ローカルサブネットに既に配置されている場合、ProxyCommandは無効になり、server-aへのプロキシ接続は行われません。

現在の場所に関係なく、このエントリでいつでもserver-abcにアクセスできます。このセットアップにより、現在の場所が特定され、それに応じて接続が設定されます。以下のために、サーバーXYZ、ちょうど同じ考えを使用しています。

ここでより詳細な説明を行いました:http : //blog.kihltech.com/2017/04/ssh-conditional-host-address-based-on-network-or-location/


7

-Fオプションを使用して、さまざまな構成ファイルから選択できます。2つのネットワークの場合。次に、現在のネットに基づいて異なる設定ファイルを使用するエイリアスを作成するか、ログインスクリプトでIPアドレスに基づいて単一のエイリアスを設定します。


ありがとう!IPに基づいて動作するスクリプトを取得できない場合、-Fのエイリアスは間違いなくフォールバックになります。
ネイトパーソンズ

これは素晴らしいです、私はちょうど同じ質問をしようとしていました。新しい端末を起動するときに環境変数を設定する他のオプションを既にスクリプト化しています。環境に基づいてエイリアスを簡単に作成したり、適切な.ssh / configをシンボリックリンクしたりできます。
newz2000

1

IPをパターンと照合してシェルスクリプトを作成し、適切なシェルスクリプトをシンボリックリンクします。

何らかの理由で自宅と職場のIP範囲が同じ場合は、DHCPで構成されたDNSサーバーを含む/etc/resolv.confに基づいて切り替えてみてください。


0

.ssh / configの「ホスト」オプションを使用すると、宛先に基づいて構成を変更できます。これを使用して、行き先に基づいてポート転送などを調整します。


0

私は過去にこの質問を検討しましたが、可能な解決策の1つは、構成ファイルにそのようなエントリを含めることです。

Host ENTRY_POINT
Hostname ENTRY_POINT_FQDN
User USERNAME

Host *.INSIDE_DOMAIN
ProxyCommand ssh ENTRY_POINT nc %h %p

このように、外にいる場合は、$ ssh machine.inside_domainを実行できます。内部にいてDNSを解決している場合は、$ ssh machineを使用できます。それは私にとってはうまくいきます。

誰かがこの考えを改善し、おそらくDNS構成を変更して、外部にいてSSHエントリポイントを使用している場合に、マシンがmachine.inside_domainに自動的に解決されるようにすることができます。

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