Como configurar o / etc / issues para mostrar o endereço IP do eth0

12

Eu tenho algumas máquinas virtuais linux com interfaces em ponte e gostaria que o endereço IP da máquina aparecesse após a inicialização da máquina (no logon, onde geralmente mostra o lançamento e o kernel).

Pelo que sei, a mensagem é captada em / etc / issues, mas não sei como e quando escrever.

Bruno Lopes
fonte
Ei Bruno, você pode mudar a resposta aceita para PabloC? Sua resposta é realmente ótima. Encontrar a documentação para isso é muito difícil e sua resposta é muito completa.
Peter Senna

Respostas:

13

É apenas um arquivo de texto ... você escreve da mesma maneira que envia texto para um arquivo com qualquer outro script de shell. Algo assim substituiria o arquivo / etc / issue apenas pelo seu endereço IP:

ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d: > /etc/issue

Obviamente, você pode tornar isso arbitrariamente mais complexo, dependendo das informações que você deseja no seu /etc/issuearquivo.

Você pode gravar neste arquivo no seu equivalente local /etc/rc.d/rc.local (que normalmente é executado após todos os outros scripts de inicialização).

larsks
fonte
5
Um pouco mais Linuxy dizerip address show eth0 | awk '/inet / {print $2}' | cut -d/ -f1
Sorpigal
Não tenho certeza de como isso é mais linuxy, mas sim, isso também funciona.
Larsks
1
@larks: É mais linuxy porque no linux ipé a ferramenta que você deveria usar para esse tipo de coisa. ifconfigé tecnicamente apenas para compatibilidade.
Sorpigal
30

No CentOS 7 e Debian 8 (e talvez outros também), basta anexar a seguinte linha a/etc/issue

My IP address: \4

e isso será resolvido para o endereço IPv4 da máquina. Se você possui várias interfaces de rede e deseja escolher uma específica, pode especificá-la com

My IP address: \4{eth0}

Verifique man gettyuma lista de sequências de escape suportadas na sua distribuição.

PaoloC
fonte
Também funciona no CentOS 8 :)
Orsiris de Jong 07/10/19
Isso funcionou perfeitamente no meu Centos 7 vm.
Kevin Mason
6

Este script adicionará / removerá endereços IP de / para o /etc/issuearquivo, conforme necessário:

#!/bin/sh
PREFIX="Local IP addresses:"
IPADDRS=$(hostname -I | tr " " "\n" | grep -v "^$" | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tr "\n" " ")

perl -i -p -0777 -e "s/^$PREFIX[^\n]*\n\n//m; s/$/\n$PREFIX $IPADDRS\n/ if length('$IPADDRS')>6" /etc/issue

Se você estiver usando uma distribuição baseada no Debian, é melhor colocar o script nesses locais:

/etc/network/if-up.d/update-issue
/etc/network/if-post-down.d/update-issue

Dessa forma, os scripts são executados toda vez que uma interface é ativada ou desativada. Colocá-lo /etc/rc.d/rc.localtem a desvantagem de ser executado apenas uma vez durante a inicialização.

Pow Pow
fonte
3
Para quem procura, no Red Hat / CentOS / etc esse script seria /sbin/if{up,down}-local. (Se ele existir, ele é chamado por /etc/sysconfig/network-scripts/ip{up,down}-post.)
Aaron Copley
@powpow: Por que "endereços IP locais"? --all-ip-addressesgera também endereços IP "públicos". Talvez algo como "endereços IP de todas as interfaces externas deste host:" faça mais sentido.
ypid
4

você pode escrever uma vez. infelizmente não existe uma sequência de escape getty para mostrar o endereço IP de eth0, mas existe uma sequência de escape que você pode usar em / etc / issue para mostrar o nome do host: \ n

você sempre pode definir estaticamente o ip da máquina em / etc / issue, escrevendo-o diretamente no arquivo. lembre-se de que o arquivo /etc/issue.net é usado para logins remotos; portanto, você também pode editá-lo.

de qualquer maneira, depois de trabalhar na janela do terminal, você perderá a tela inicial e as informações de endereço IP / host. A melhor maneira é definir o nome do host no prompt (a maioria das distribuições Linux) usando \ h ou \ H ou novamente, definindo estaticamente o endereço IP que você sabe que está definido no host na variável PS1, você pode definir a variável PS1 em / etc / perfil na maioria das distros linux.

user237419
fonte
1
Isto é só para saber o que IP para conectar-se após a inicialização da VM, de modo a configurar como larsks diz é suficiente :)
Bruno Lopes
1

Muito obrigado ao @larsks por começar. Descobri que havia problemas com a conclusão do script antes de ser necessário, portanto meu arquivo de problemas estava sempre em branco. Então eu adicionei uma pausa de 1 segundo e fiz um loop. Eu realmente não sou um roteirista de bash, então, se houver uma maneira melhor de fazer isso, entre em contato. Eu adicionei um COUNTpara garantir que ele não ficasse para sempre.

#!/bin/sh

COUNT=1

while [ $COUNT -lt 10 ]
do
  echo $COUNT

  COUNT=$((COUNT + 1))
  IP=`ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d: `
  if [ -n "$IP" ]; then
    break
  fi 
  sleep 1
done


echo "IP: " $IP | cat > /etc/issue

Eu coloquei esse script /etc/network/if-up.d/.

nomadic_squirrel
fonte
1

O Systemd torna isso relativamente fácil. systemctl edit getty@com conteúdo como:

[Service]
ExecStartPre=-/bin/bash -c '[ ! -f /etc/.issue.orig ] && cp /etc/issue /etc/.issue.orig; int=`ls /sys/class/net|grep enp|head -1`; sed -r "s/\\\\\\n/[\\\\\\4\{$$int\}]/" < /etc/.issue.orig > /etc/issue'

Então systemctl daemon-reload && systemctl restart getty@tty1

h0tw1r3
fonte
0

Para quem chegou aqui que usa o Ubuntu 19.04, acabei adotando a resposta do @ powpow.

Eu criei o arquivo: /etc/network/if-up.d/update-issuecom o seguinte conteúdo:

#!/bin/sh
PREFIX="Ubuntu 19.04 - dev"
IPADDRS=$(hostname -I | tr " " "\n" | grep -v "^$" | sort -t . -k 1,1n | head -1 | tr "\n" " ")
echo "$PREFIX\n\nIP: $IPADDRS\n" > /etc/issue

Marquei o arquivo como executável: chmod 0755 /etc/network/if-up.d/update-issue

Funciona bem!

Steve McDonald
fonte