Cómo configurar / etc / cuestiones para mostrar la dirección IP para eth0

12

Tengo un par de máquinas virtuales Linux con interfaces en puente, y me gustaría que la dirección IP de la máquina se muestre después del arranque de la máquina (en el inicio de sesión, donde generalmente muestra la versión y el núcleo).

Por lo que puedo decir, el mensaje se extrae de / etc / issues, pero no estoy seguro de cómo y cuándo escribirlo.

Bruno Lopes
fuente
Hola Bruno, ¿puedes cambiar la respuesta aceptada a PabloC? Su respuesta es realmente genial. Encontrar la documentación para esto es muy difícil y su respuesta es muy completa.
Peter Senna

Respuestas:

13

Es solo un archivo de texto ... lo escribes de la misma manera que enviarías texto a un archivo con cualquier otro script de shell. Algo como esto reemplazaría el problema / etc / con solo su dirección IP:

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

Obviamente, puede hacer esto arbitrariamente más complejo, dependiendo de la información que desee en su /etc/issuearchivo.

Puede escribir en este archivo en su equivalente local de /etc/rc.d/rc.local (que normalmente se ejecuta después de todos los otros scripts de inicio).

larsks
fuente
55
Un poco más Linuxy que decirip address show eth0 | awk '/inet / {print $2}' | cut -d/ -f1
Sorpigal
No estoy seguro de cómo es más linuxy, pero sí, eso también funciona.
Larsks
1
@larks: es más linuxy porque en linux ipes la herramienta que se supone que debes usar para este tipo de cosas. ifconfiges técnicamente solo por compatibilidad.
Sorpigal
31

En CentOS 7 y Debian 8 (y quizás también en otros), solo agregue la siguiente línea a/etc/issue

My IP address: \4

y eso se resolverá en la dirección IPv4 de la máquina. Si tiene varias interfaces de red y desea elegir una específica, puede especificarla con

My IP address: \4{eth0}

Busque man gettyuna lista de secuencias de escape compatibles en su distribución.

PaoloC
fuente
También funciona en CentOS 8 :)
Orsiris de Jong
Esto funcionó perfectamente en mi Centos 7 vm.
Kevin Mason
6

Este script agregará / eliminará direcciones IP al / del /etc/issuearchivo según sea necesario:

#!/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

Si está utilizando una distribución basada en Debian, es mejor colocar el script en estas ubicaciones:

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

De esta forma, los scripts se ejecutan cada vez que una interfaz se activa o desactiva. Colocarlo /etc/rc.d/rc.localtiene la desventaja de ser ejecutado solo una vez durante el arranque.

Powpow
fuente
3
Para cualquiera que busque, en Red Hat / CentOS / etc., este script sería /sbin/if{up,down}-local. (Si existe, se llama por /etc/sysconfig/network-scripts/ip{up,down}-post.)
Aaron Copley
@powpow: ¿Por qué "direcciones IP locales"? --all-ip-addressestambién genera direcciones IP "públicas". Tal vez algo como "direcciones IP de todas las interfaces externas de este host" tenga más sentido.
YPID
4

Puedes escribirlo una vez. desafortunadamente no hay una secuencia de escape getty para mostrar la dirección IP de eth0 pero hay una secuencia de escape que puede usar en / etc / issue para mostrar el nombre de host: \ n

siempre puede establecer estáticamente la ip de la máquina en / etc / issue escribiéndola directamente en el archivo. tenga en cuenta que el archivo /etc/issue.net se utiliza para inicios de sesión remotos, por lo que es posible que también desee editarlo.

de todos modos, después de trabajar en la ventana del terminal, perderá la pantalla inicial y la información de la dirección IP / host con ella. La mejor manera es establecer el nombre de host en el indicador (la mayoría de las distribuciones de Linux lo hacen) usando \ ho \ H o de nuevo, estableciendo estáticamente la dirección IP que sabes que está configurada en el host en la variable PS1, puedes configurar la variable PS1 en / etc / perfil en la mayoría de las distribuciones de Linux.

usuario237419
fuente
1
Esto es solo para saber a qué IP conectarse después de iniciar el vm, por lo que configurarlo como larsks dice es suficiente :)
Bruno Lopes
1

Muchas gracias a @larsks por comenzar. Descubrí que tenía problemas para completar el script antes de que fuera necesario, por lo que mi archivo de problema siempre estaba en blanco. Entonces agregué una pausa de 1 segundo y realicé un bucle. Realmente no soy un bash scripter, así que si hay una mejor manera de hacer esto, hágamelo saber. Agregué una COUNTpara asegurarme de que no se repitiera para siempre.

#!/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

Puse este script en /etc/network/if-up.d/.

ardilla_nómada
fuente
1

Systemd hace esto relativamente fácil. systemctl edit getty@con contenido 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'

Luego systemctl daemon-reload && systemctl restart getty@tty1

h0tw1r3
fuente
0

Para cualquiera que aterrice aquí que use Ubuntu 19.04, terminé adoptando la respuesta de @ powpow.

Creé el archivo: /etc/network/if-up.d/update-issuecon los siguientes contenidos:

#!/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

Luego marqué el archivo como ejecutable: chmod 0755 /etc/network/if-up.d/update-issue

¡Funciona genial!

Steve McDonald
fuente