Obtém e usa o endereço IP do servidor no Bash?

2

Eu tenho esse arquivo Bash que funciona perfeitamente bem em cada sistema que eu implantar, mas ele precisa ter IP do servidor colocado no comando para que funcione e eu digite-o manualmente em cada servidor, mas eu estava pensando há uma maneira de automatizar esse processo? Por exemplo, digamos que eu precise ter este comando:

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

em vez de substituir x.x.x.x em cada servidor, quero ter um arquivo Bash que recupere automaticamente o IP do servidor e execute esse comando com esse IP?

    
por Mini 17.07.2018 / 22:35

3 respostas

0

defina uma variável no início do script que defina o endereço IP e, em seguida, use essa variável no comando real em que o script está sendo executado.

no topo da minha cabeça, algo como

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

então, no script, use apenas $IPADDR onde você colocaria o IP.

Isso só funcionará corretamente em um servidor com um único IP e um único loopback de 127.0.0.1, e provavelmente há uma maneira melhor de fazê-lo.

    
por 17.07.2018 / 22:44
0

Supondo que o "host" tenha um único endereço IP, você pode fazer algo como:

MYHOSTIP=$(host 'hostname' | head -n 1 | awk '{ print $NF; }') mycli servie --host $MYHOSTIP
    
por 17.07.2018 / 22:45
0

Supondo que seu sistema tenha 2 dispositivos Ethernet, eth0 e eth1 e eth0 estão conectados à sua LAN, digamos IPs 192.168.1.X e seu eth1 dispositivo está conectado ao seu ISP (WAN) vai querer usar o seguinte comando ifconfig para obter o seu IP para o lado da WAN.

OBSERVAÇÃO: As 2as 2 maneiras assumem que você as está executando em um computador que possui 2 dispositivos ethernet e que um deles está conectado ao seu ISP (modem a cabo e / ou modem DSL) . Neste cenário, o dispositivo ethernet (eth1) será configurado com o seu endereço IP na internet (WAN IP).

1ª maneira

                          +------------------------+
  +--------+    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

Você também pode usar o comando ip .

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

2ª maneira

Se você precisar descobrir isso em um sistema que fica apenas na LAN, você pode configurar uma chave ssh sem senha e adicioná-la a uma conta em sua máquina LAN para que possa acessar remotamente o sistema com o acesso à WAN. assim.

                                                            +----------------+
  +--------+    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 \ }' | sed -e s/addr://"
54.234.1.33

3ª via

Se você não conseguir usar ssh na caixa que possui acesso à WAN e estiver usando um roteador / switch doméstico, como uma caixa Linksys ou Netgear. Você pode obter o IP desse dispositivo por meio de uma página de status HTTP. Eu fiz isso no passado também, algo semelhante ao que é descrito neste post do fórum 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

OBSERVAÇÃO: Essa abordagem é altamente dependente de qual roteador / switch você possui, seja uma marca da Linksys, Netgear, etc. Cada um terá sua própria página exclusiva com o IP da WAN.

4º caminho

Enviando uma consulta contra um site externo que relatará seu endereço IP da WAN.

OBSERVAÇÃO: Estou ciente de que a pergunta original mencionou que eles estavam procurando alternativas para essa abordagem, mas estou colocando aqui para que essa resposta cubra todas as bases.

                                                        +---------------+
  +-------------+   +--------+   +------+     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.*##'
54.234.1.33

Informações adicionais estão disponíveis aqui: COMO: Verificar endereço IP externo na linha de comando .

Referências

por 18.07.2018 / 06:01