gamma
私は職場で継続的に実行されているサーバーを持っています。時には自宅で接続しますが、この場合はパブリックIPアドレスを使用します55.22.33.99
。時には職場でパケットが不必要にバウンスされるのではなく、ローカルIPアドレスを介して接続されます192.168.1.100
。
現在、私はそれらを2つの異なる項目に分けています。~/.ssh/conf
Host gamma-local
HostName 192.168.1.100
Port 22
User andreas
Host gamma-remote
HostName 55.22.33.99
Port 12345
User andreas
したがって、職場にいる場合はを入力しssh gamma-local
、家にいる場合は(または世界のどこでも)を実行しますssh gamma-remote
。
サーバーに接続するときは、場所に応じて別の名前を入力する必要はなく、その部分を自動的に実行したいと思います。たとえば、場合によっては、そうでない人をリンクする自動化されたスクリプトがあります。私がどこにいるか知っています。
持つこの問題を解決するには、Bash スクリプトを使用します。まず、ローカルで接続を「試行」して接続できない場合は、リモートIPアドレスに接続してみてください。これは問題ありませんが、(1)非効率的なようです(特に常にエラーをすぐに再送信するわけではないため、接続がタイムアウトするまで「待機」する必要があるため)。 (2) Bashとスクリプトのドラッグが必要です。
Bashスクリプトを使用しない場合、または接続が最初に機能するかどうかを「テスト」せずにこれを達成する別の方法はありますか?
ベストアンサー1
現在接続されているネットワークを識別する方法がある場合は、Match
キーワードを使用できます。~/.ssh/config
あなたが欲しいものをしてください。これにはOpenSSH ≥6.5が必要です。
私は次のようなものを使用します
Match originalhost gamma exec "[ x$(/sbin/iwgetid --scheme) != xMyHomeESSID ]"
HostName 192.168.1.100
Port 22
Host gamma
User andreas
Port 12345
HostName 55.22.33.99
だから私はSSH接続のために自宅にいることを確認するために使用しているWi-Fiネットワークの識別子を使います。ただし、コンピュータに割り当てられているIPアドレスまたは2つのネットワークを区別できる他のものを確認することもできます。