BashでサーバーのIPアドレスを取得して使用しますか?

BashでサーバーのIPアドレスを取得して使用しますか?

展開するすべてのシステムで完全に実行されるBashファイルがありますが、機能するにはサーバーIPをコマンドに入力する必要があり、各サーバーに手動で入力しますが、方法がないかと思います。このプロセスを自動化するには?たとえば、次のコマンドが必要だとします。

mycli serve --host x.x.x.x &

Bashファイルが自動的にサーバーIPを検索し、各サーバーでxxxxを置き換えるのではなく、そのIPを使用してコマンドを実行したいですか?

答え1

IPアドレスを設定するスクリプトの先頭に変数を設定した後、スクリプトが実行する実際のコマンドでその変数を使用します。

突然思ったんだけど、

IPADDR=$(ip addr show |grep 'inet '|grep -v 127.0.0.1 |awk '{print $2}'| cut -d/ -f1)

次に、スクリプトで$IPADDRIPを配置する場所を使用します。

これは、単一のIPと単一のループバック127.0.0.1を持つサーバーでのみ正しく機能し、これを行うより良い方法がある可能性があります。

答え2

「ホスト」にIPアドレスがあると仮定すると、次のことができます。

MYHOSTIP=$(host `hostname` | head -n 1 | awk '{ print $NF; }') mycli servie --host $MYHOSTIP

答え3

システムにIP 192.168.1.XなどのLANに2つのイーサネットデバイスがeth0接続されており、デバイスがISP(WAN)に接続されていると仮定すると、IP WAN側を取得するには、次のコマンドを使用する必要があります。eth1eth0eth1ifconfig

メモ:方法 2 では、2 つのイーサネット デバイスがあるコンピューターで実行し、そのうちの 1 つがケーブルモデムおよび/または DSL モデム (ISP) に接続されていると仮定します。この場合、イーサネットデバイス(eth1)はインターネット(WAN IP)のIPアドレスで構成されます。

最初の方法

                          +------------------------+
  +--------+    WAN IP    |   Computer that wants  |  LAN IP
  |Internet|--------------|     to know WAN IP     |------------
  +--------+  54.234.1.33 | +------+      +------+ | 192.168.1.1
                          +-| eth1 |------| eth0 |-+
                            +------+      +------+

% ifconfig eth1 | awk '/inet / { print $2 }' | sed -e s/addr://
54.234.1.33

このコマンドを使用することもできますip

% ip -4 addr show eth1 | awk '/inet/ {print $2}' | sed 's#/.*##'
54.234.1.33

2番目の方法

LANにのみ存在するシステムでこの情報を見つける必要がある場合は、パスワードなしのSSHキーを設定してLANシステムのアカウントに追加すると、WANを介してシステムにリモートでアクセスできます。

                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|remote-server|-----------------| wants to know  |
  +--------+  54.234.1.33  +----+-----+----+  192.168.1.x  +----+ WAN IP     |
                           |eth1|     |eth0|               |eth0|------------+
                           +----+     +----+               +----+

% ssh ruser1@remote-server "ifconfig eth1 | awk '/inet / { print \$2 }' | sed -e s/addr://"
54.234.1.33

3番目の方法

WANアクセス可能なボックスにSSHで接続できず、LinksysやNetegarボックスなどのホームルーター/スイッチを使用している場合。 HTTPステータスページからデバイスからIPを取得できます。私はこの記事で説明したのと同様に、過去にこれを行ったことがあります。Whatismyip.comフォーラムの投稿

                                                               192.168.1.2
                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|router/switch|-----------------| wants to know  |
  +--------+  54.234.1.33   +-------------+   192.168.1.x  +----+ WAN IP     |
                              192.168.1.1                  |eth0|------------+
                                                           +----+

# something like this....

% wget -q -O - http://<username>:<password>@192.168.1.1/Status_Router.asp | grep "ipaddress" | cut -d" " -f2

メモ:この方法は、Linksys、Netegarなどのブランドであるかどうかに関係なく、所有しているルーター/スイッチによって大きく異なります。それぞれにWAN IPを含む独自のページがあります。

4番目の方法

WAN IPアドレスを報告する外部インターネットサイトにクエリを送信します。

メモ:私は彼らがこのアプローチに代わるものを探していると述べた元の質問を知っていますが、この答えがすべての基盤をカバーするようにここに置きます。

                                                        +---------------+
  +-------------+   +--------+   +------+     LAN IP    | Computer that |
  |whatsmyip.com|---|Internet|---|router|---------------| wants to know |
  +-------------+   +--------+   +------+  192.168.1.x +----+ WAN IP    |
you're 54.234.1.33                                     |eth0|-----------+
                                                       +----+

# 1st server
% wget -qO - ipv4bot.whatismyipaddress.com
54.234.1.33

# 2nd server
% curl 'https://api.ipify.org?format=json'

{"ip":"54.234.1.33"}
% curl 'https://api.ipify.org?format=txt'
54.234.1.33

# 3rd server
% curl -s checkip.dyndns.org | sed 's#.*Address: \(.*\)</b.*#\1#'
54.234.1.33

詳しくはこちらをご覧ください。方法:コマンドラインから外部IPアドレスを確認する

引用する

関連情報