Come impostare / etc / issues per mostrare l'indirizzo IP per eth0


12

Ho un paio di macchine virtuali Linux con interfacce a ponte e vorrei che l'indirizzo IP della macchina venisse visualizzato dopo l'avvio della macchina (nel login, dove di solito mostra il rilascio e il kernel).

Da quello che posso dire il messaggio è preso da / etc / issues, ma non sono sicuro di come e quando scriverlo.


Ehi Bruno, puoi cambiare la risposta accettata a PabloC? La sua risposta è davvero fantastica. Trovare la documentazione per questo è molto difficile e la sua risposta è molto completa.
Peter Senna,

Risposte:


13

È solo un file di testo ... ci scrivi nello stesso modo in cui invieresti testo a un file con qualsiasi altro script di shell. Qualcosa del genere sostituirebbe / etc / issue con il proprio indirizzo IP:

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

Ovviamente puoi renderlo arbitrariamente più complesso, a seconda delle informazioni che desideri nel tuo /etc/issuefile.

Puoi scrivere su questo file nel tuo equivalente locale di /etc/rc.d/rc.local (che di solito viene eseguito dopo tutti gli altri script di avvio).


5
Leggermente più Linuxy da direip address show eth0 | awk '/inet / {print $2}' | cut -d/ -f1
Sorpigal il

Non sono sicuro di come sia più linuxy, ma sì, funziona anche.
Larsks,

1
@larks: è più linuxy perché su Linux ipè lo strumento che dovresti usare per questo genere di cose. ifconfigè tecnicamente solo per compatibilità.
Sorpigal,

33

Su CentOS 7 e Debian 8 (e forse anche su altri), basta aggiungere la seguente riga a/etc/issue

My IP address: \4

e questo si risolverà all'indirizzo IPv4 della macchina. Se hai più interfacce di rete e vuoi sceglierne una specifica, puoi specificarla con

My IP address: \4{eth0}

Cerca man gettyun elenco di sequenze di escape supportate nella tua distribuzione.


Funziona anche su CentOS 8 :)
Orsiris de Jong

Questo ha funzionato perfettamente sul mio Centos 7 vm.
Kevin Mason,

6

Questo script aggiungerà / rimuoverà gli indirizzi IP nel / dal /etc/issuefile secondo necessità:

#!/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 stai usando una distro basata su Debian, è meglio posizionare lo script in queste posizioni:

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

In questo modo gli script vengono eseguiti ogni volta che un'interfaccia si alza o si abbassa. Inserirlo /etc/rc.d/rc.localha lo svantaggio di essere eseguito una sola volta durante l'avvio.


3
Per chiunque cerchi, in Red Hat / CentOS / etc questo script sarebbe /sbin/if{up,down}-local. (Se esiste, viene chiamato da /etc/sysconfig/network-scripts/ip{up,down}-post.)
Aaron Copley,

@powpow: perché "indirizzi IP locali"? --all-ip-addressesgenera anche indirizzi IP "pubblici". Forse qualcosa come "Indirizzi IP di tutte le interfacce esterne di questo host:" ha più senso.
ypid

4

puoi scriverlo una volta. sfortunatamente non esiste una sequenza di escape getty per mostrare l'indirizzo IP di eth0 ma c'è una sequenza di escape che puoi usare in / etc / issue per mostrare il nome host: \ n

puoi sempre impostare staticamente l'ip della macchina in / etc / issue scrivendolo direttamente nel file. attenzione che il file /etc/issue.net viene utilizzato per gli accessi remoti, quindi potresti voler modificare anche quello.

in ogni caso, dopo aver lavorato nella finestra del terminale, perderai la schermata iniziale e le informazioni sull'indirizzo IP / host con esso. il modo migliore è impostare il nome host nel prompt (la maggior parte delle distribuzioni di Linux) usando \ h o \ H o di nuovo, impostando staticamente l'indirizzo IP che si conosce è impostato sull'host nella variabile PS1, è possibile impostare la variabile PS1 in / etc / profilo sulla maggior parte delle distro linux.


1
Questo è solo per sapere a quale IP connettersi dopo aver avviato la VM, quindi configurarlo come dice Larsks è abbastanza :)
Bruno Lopes,

1

Mille grazie a @larsks per aver iniziato. Ho scoperto di avere problemi con il completamento dello script prima che fosse necessario, quindi il mio file del problema era sempre vuoto. Quindi ho aggiunto una pausa di 1 secondo e ho eseguito il loop. Non sono davvero uno scripter bash, quindi se c'è un modo migliore per farlo fatemelo sapere. Ho aggiunto a COUNTper assicurarmi che non si ripetesse per 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

Ho inserito questo script in /etc/network/if-up.d/.


1

Systemd lo rende relativamente semplice. systemctl edit getty@con contenuti come:

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

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


0

Per chiunque atterrasse qui che utilizza Ubuntu 19.04, ho finito per adottare la risposta di @ powpow.

Ho creato il file: /etc/network/if-up.d/update-issuecon i seguenti contenuti:

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

Ho quindi contrassegnato il file come eseguibile: chmod 0755 /etc/network/if-up.d/update-issue

Funziona alla grande!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.