ローカル/リモートの状況に合わせてホスト名を調整する

ローカル/リモートの状況に合わせてホスト名を調整する

私はローカルSSHサーバーを設定しました。

~/.ssh/config:

Host myserver-local
HostName 192.168.2.8
User iago-lito
Port 22

リモートアクセス用に設定しました。IPなしアクセスできるアカウント渡すdyndns IP検証のために、私は他のネットワークからアクセスするときに次のようなきちんとしたエイリアスを使いたいと思います。

~/.ssh/config:

Host myserver
HostName myserver.ddns.net
User iago-lito
Port 22

残念ながら、私のルータが許可していないのでNATループバック、次を使用する必要があります。

ssh myserver

私が去るとき:

ssh myserver-local

家にいるとき...これにより、スクリプトを自動化することが非常に迷惑になりますscpgit push など。

どちらの場合も、同じエイリアスが機能するようにするにはどうすればよいですか?

答え1

サーバーのローカルアドレスをpingし、結果に応じて1つまたは別の.ssh / configファイルを交換するスクリプトを作成できます。たとえば、

ping -c1 -W1 192.168.x.x

オプションはカウント(例:1ping)と待機(1秒)です。 pingの戻り値を使用します。 - 0ではなく0を見つけました。見つかりません。

ネットワークに接続すると、このスクリプトを実行するように設定できます。

内容が短くて申し訳ありませんが、携帯で書いています。

答え2

かなり近代的なOpenSSHでは、シェルコマンドを実行してMatchブロックを選択できます。~/.ssh/configam-on-home-networkホームネットワークで実行している場合は0を返し、外部で実行すると1を返すスクリプトがあるとします。

Match Host myserver exec "am-on-home-network"
HostName myserver
User iago-lito
Port 22

Host myserver
HostName myserver.ddns.net
User iago-lito
Port 22

の場合をam-on-home-network使用してローカルネットワークをナビゲートできますarp。ホームルーターのMACアドレスを探します。 (多くのプライベートネットワークが同じ範囲のプライベートIPアドレスを使用しているため、IPアドレスの検索は信頼できません。)

#!/bin/sh
timeout 0.2 arping -f -q -I eth0 12:34:56:78:9a:bc

MACアドレスを自宅にいるときにコンピュータに表示されるルータのMACアドレスに調整します。eth0ホームルーターに接続しているコンピューターのネットワークインターフェースを調整します。


純粋なSSH方法の利点は、ユーザーモードで実行できることですが、SSHでのみ機能し、接続設定の遅延が大幅に増加します。より良い解決策は、システムレベルでDNSサーバーを実行し、myserver.ddns.netローカルネットワークにいるときにローカルIPアドレスとグローバル名を提供するように構成することです。DNSエンドポイントコンピュータまたは小規模ネットワークで実行するのに適した、小さくシンプルなDNSキャッシュとサーバー。コンピュータでまだDNSキャッシュを実行していない場合は、通常のインターネット使用が少し速くなります。 Ubuntuはデフォルトでdnsmasqを実行します。

/etc/dnsmasq.d/home-serverdnsmasqで次の内容でファイルを作成します。

host-record=myserver.ddns.net,192.168.2.1

ネットワーク起動スクリプト(ディストリビューションのどこにいても)に次のスクリプトを追加します。

#!/bin/sh
comment=\#
if timeout 0.2 arping -f -q -I eth0 12:34:56:78:9a:bc; then
  comment=
fi
sed -i "\$s/^#*/$comment/" /etc/dnsmasq.d/home-server
service dnsmasq restart

システムにD-Busを介してDnsmasqが設定されている場合、設定ファイルを編集するのは最善の選択ではなく、動作しているかどうかはわかりません。dbus-sendarpingの出力に応じて、ホストレコードの追加または削除を呼び出す必要があります。またはNetworkManagerを使用している場合は、ホームネットワークに対応する接続​​にホストエントリを設定するように設定します。

関連情報