Jak skonfigurować / etc / Issues, aby wyświetlał adres IP dla eth0

12

Mam kilka maszyn wirtualnych z systemem Linux z mostkowanymi interfejsami i chciałbym, aby adres IP maszyny pojawiał się po uruchomieniu komputera (podczas logowania, gdzie zwykle pokazuje wydanie i jądro).

Z tego, co mogę powiedzieć, wiadomość została odebrana z / etc / Issues, ale nie jestem pewien, jak i kiedy do niej napisać.

Bruno Lopes
źródło
Hej Bruno, czy możesz zmienić przyjętą odpowiedź na PabloC? Jego odpowiedź jest naprawdę świetna. Znalezienie dokumentacji na ten temat jest bardzo trudne, a jego odpowiedź jest bardzo kompletna.
Peter Senna

Odpowiedzi:

13

To tylko plik tekstowy ... piszesz do niego w taki sam sposób, jak wysyłasz tekst do pliku za pomocą dowolnego innego skryptu powłoki. Coś takiego zastąpiłoby problem / etc / tylko twoim adresem IP:

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

Oczywiście możesz uczynić to arbitralnie bardziej złożonym, w zależności od tego, jakie informacje chcesz w swoim /etc/issuepliku.

Możesz zapisać do tego pliku w lokalnym odpowiedniku /etc/rc.d/rc.local (który zwykle wykonuje się po wszystkich innych skryptach startowych).

Larsks
źródło
5
Nieco bardziej Linuxy do powiedzeniaip address show eth0 | awk '/inet / {print $2}' | cut -d/ -f1
Sorpigal
Nie jestem pewien, jak to jest bardziej linuksowe, ale tak, to też działa.
larsks,
1
@larks: Jest bardziej linuksowy, ponieważ na Linuksie ipjest narzędziem, którego powinieneś używać do tego rodzaju rzeczy. ifconfigjest technicznie tylko dla kompatybilności.
Sorpigal,
34

W CentOS 7 i Debian 8 (i może także w innych), wystarczy dołączyć następującą linię do/etc/issue

My IP address: \4

i to rozwiąże adres IPv4 urządzenia. Jeśli masz wiele interfejsów sieciowych i chcesz wybrać jeden konkretny, możesz go określić za pomocą

My IP address: \4{eth0}

Sprawdź man gettylistę obsługiwanych sekwencji specjalnych w twojej dystrybucji.

PaoloC
źródło
Działa również na CentOS 8 :)
Orsiris de Jong
Działa to doskonale na moim Centos 7 vm.
Kevin Mason
6

Ten skrypt doda / usunie adresy IP do / z /etc/issuepliku w razie potrzeby:

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

Jeśli używasz dystrybucji opartej na Debianie, najlepiej umieścić skrypt w następujących lokalizacjach:

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

W ten sposób skrypty są wykonywane za każdym razem, gdy pojawia się lub znika interfejs. Umieszczenie go /etc/rc.d/rc.localma tę wadę, że zostanie wykonane tylko raz podczas uruchamiania.

powpow
źródło
3
Dla każdego, kto szuka, w Red Hat / CentOS / etc będzie to skrypt /sbin/if{up,down}-local. (Jeśli istnieje, jest nazywany przez /etc/sysconfig/network-scripts/ip{up,down}-post.)
Aaron Copley
@powpow: Dlaczego „Lokalne adresy IP”? --all-ip-addresseswyprowadza również „publiczne” adresy IP. Może coś w rodzaju „adresów IP wszystkich zewnętrznych interfejsów tego hosta:” ma większy sens.
ypid
4

możesz to napisać raz. niestety nie ma sekwencji getty, aby pokazać adres IP eth0, ale istnieje sekwencja ucieczki, której można użyć w / etc / issue, aby wyświetlić nazwę hosta: \ n

zawsze możesz statycznie ustawić adres IP komputera w / etc / issue, pisząc go bezpośrednio do pliku. strzeż się, że plik /etc/issue.net jest używany do zdalnego logowania, więc możesz go również edytować.

tak czy inaczej, po pracy w oknie terminala stracisz ekran początkowy i informacje o adresie IP / hosta. najlepszym sposobem jest ustawienie nazwy hosta w wierszu polecenia (większość dystrybucji Linuksa robi to) za pomocą \ h lub \ H lub ponownie, statycznie ustawiając adres IP, o którym wiesz, że jest ustawiony na hoście w zmiennej PS1, możesz ustawić zmienną PS1 w / etc / profil w większości dystrybucji Linuksa.

użytkownik237419
źródło
1
Chodzi o to, aby wiedzieć, z którym adresem IP połączyć się po uruchomieniu vm, więc skonfigurowanie go jak mówi Larsks wystarczy :)
Bruno Lopes
1

Ogromne podziękowania dla @larsks za rozpoczęcie pracy. Odkryłem, że miałem problem z ukończeniem skryptu, zanim był potrzebny, więc mój plik problemu był zawsze pusty. Dodałem więc 1-sekundową pauzę i zapętliłem. Tak naprawdę nie jestem skrypciarzem, więc jeśli jest na to lepszy sposób, proszę dać mi znać. Dodałem a, COUNTaby upewnić się, że nie zapętli się wiecznie.

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

Umieściłem ten skrypt w /etc/network/if-up.d/.

nomadic_squirrel
źródło
1

Systemd sprawia, że ​​jest to stosunkowo łatwe. systemctl edit getty@z treściami takimi jak:

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

Następnie systemctl daemon-reload && systemctl restart getty@tty1

h0tw1r3
źródło
0

Dla każdego lądującego tutaj, który używa Ubuntu 19.04, skończyłem z odpowiedzią @ powpow.

Utworzyłem plik: /etc/network/if-up.d/update-issueo następującej treści:

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

Następnie oznaczyłem plik jako wykonywalny: chmod 0755 /etc/network/if-up.d/update-issue

Działa świetnie!

Steve McDonald
źródło