Comment configurer / etc / issues pour afficher l'adresse IP de eth0

12

J'ai quelques machines virtuelles Linux avec des interfaces pontées, et j'aimerais que l'adresse IP de la machine apparaisse après le démarrage de la machine (dans la connexion, où elle affiche généralement la version et le noyau).

D'après ce que je peux dire, le message provient de / etc / issues, mais je ne sais pas comment ni quand y écrire.

Bruno Lopes
la source
Hé Bruno, peux-tu changer la réponse acceptée à PabloC? Sa réponse est vraiment géniale. Trouver la documentation pour cela est très difficile et sa réponse est très complète.
Peter Senna

Réponses:

13

C'est juste un fichier texte ... vous y écrivez de la même manière que vous enverriez du texte dans un fichier avec n'importe quel autre script shell. Quelque chose comme ça remplacerait / etc / issue avec juste votre adresse IP:

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

Évidemment, vous pouvez rendre cela arbitrairement plus complexe, selon les informations que vous souhaitez dans votre /etc/issuefichier.

Vous pouvez écrire dans ce fichier dans votre équivalent local de /etc/rc.d/rc.local (qui s'exécute généralement après tous les autres scripts de démarrage).

larsks
la source
5
Un peu plus Linuxy à direip address show eth0 | awk '/inet / {print $2}' | cut -d/ -f1
Sorpigal
Je ne sais pas comment c'est plus linuxy, mais oui, cela fonctionne aussi.
larsks
1
@larks: C'est plus linuxy parce que sur linux ipest l'outil que vous êtes censé utiliser pour ce genre de chose. ifconfigest techniquement juste pour la compatibilité.
Sorpigal
33

Sur CentOS 7 et Debian 8 (et peut-être d'autres aussi), ajoutez simplement la ligne suivante à/etc/issue

My IP address: \4

et cela se résoudra en adresse IPv4 de la machine. Si vous avez plusieurs interfaces réseau et que vous souhaitez en choisir une spécifique, vous pouvez la spécifier avec

My IP address: \4{eth0}

Vérifiez man gettyla liste des séquences d'échappement prises en charge sur votre distribution.

PaoloC
la source
Fonctionne
Cela a parfaitement fonctionné sur mon Centos 7 vm.
Kevin Mason
6

Ce script ajoutera / supprimera des adresses IP au / du /etc/issuefichier selon les besoins:

#!/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 vous utilisez une distribution basée sur Debian, il est préférable de placer le script à ces emplacements:

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

De cette façon, les scripts sont exécutés chaque fois qu'une interface monte ou descend. Le placer dans /etc/rc.d/rc.locala l'inconvénient d'être exécuté une seule fois lors du démarrage.

powpow
la source
3
Pour quiconque cherche, dans Red Hat / CentOS / etc, ce script serait /sbin/if{up,down}-local. (S'il existe, il est appelé par /etc/sysconfig/network-scripts/ip{up,down}-post.)
Aaron Copley
@powpow: Pourquoi "Adresses IP locales"? --all-ip-addressesaffiche également des adresses IP "publiques". Peut-être que quelque chose comme "les adresses IP de toutes les interfaces externes de cet hôte:" a plus de sens.
ypid
4

vous pouvez l'écrire une fois. malheureusement, il n'y a pas de séquence d'échappement pour afficher l'adresse IP de eth0 mais il existe une séquence d'échappement que vous pouvez utiliser dans / etc / issue pour afficher le nom d'hôte: \ n

vous pouvez toujours définir statiquement l'ip de la machine dans / etc / issue en l'écrivant directement dans le fichier. sachez que le fichier /etc/issue.net est utilisé pour les connexions à distance, vous pouvez donc également le modifier.

de toute façon, après avoir travaillé dans la fenêtre du terminal, vous perdrez l'écran initial et les informations d'adresse IP / hôte avec. la meilleure façon est de définir le nom d'hôte dans l'invite (la plupart des distributions Linux le font) en utilisant \ h ou \ H ou encore, en définissant statiquement l'adresse IP que vous connaissez est définie sur l'hôte dans la variable PS1, vous pouvez définir la variable PS1 dans / etc / profil sur la plupart des distributions Linux.

user237419
la source
1
C'est juste pour savoir à quelle IP se connecter après le démarrage du vm, donc le configurer comme le dit larsks suffit :)
Bruno Lopes
1

Un grand merci à @larsks pour avoir commencé. J'ai trouvé que j'avais du mal à terminer le script avant qu'il ne soit nécessaire, donc mon fichier de problème était toujours vide. J'ai donc ajouté une pause d'une seconde et bouclé. Je ne suis pas vraiment un scripteur bash, donc s'il y a une meilleure façon de le faire, faites le moi savoir. J'ai ajouté un COUNTpour m'assurer qu'il ne boucle pas indéfiniment.

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

J'ai placé ce script /etc/network/if-up.d/.

nomadic_squirrel
la source
1

Systemd rend cela relativement facile. systemctl edit getty@avec un contenu comme:

[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'

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

h0tw1r3
la source
0

Pour tous ceux qui atterrissent ici qui utilisent Ubuntu 19.04, j'ai fini par adopter la réponse de @ powpow.

J'ai créé le fichier: /etc/network/if-up.d/update-issueavec le contenu suivant:

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

J'ai ensuite marqué le fichier comme exécutable: chmod 0755 /etc/network/if-up.d/update-issue

Fonctionne très bien!

Steve McDonald
la source