So richten Sie / etc / issues ein, um die IP-Adresse für eth0 anzuzeigen

12

Ich habe ein paar virtuelle Linux-Maschinen mit überbrückten Schnittstellen und möchte, dass die IP-Adresse der Maschine nach dem Start der Maschine angezeigt wird (in der Anmeldung, wo normalerweise die Version und der Kernel angezeigt werden).

Soweit ich weiß, stammt die Nachricht aus / etc / issues, aber ich bin nicht sicher, wie und wann ich darauf schreiben soll.

Bruno Lopes
quelle
Hey Bruno, kannst du die akzeptierte Antwort auf PabloC ändern? Seine Antwort ist wirklich toll. Die Dokumentation dafür zu finden ist sehr schwierig und seine Antwort ist sehr vollständig.
Peter Senna

Antworten:

13

Es ist nur eine Textdatei ... Sie schreiben darauf genauso, wie Sie Text mit einem anderen Shell-Skript an eine Datei senden würden. So etwas würde / etc / issue nur durch Ihre IP-Adresse ersetzen:

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

Natürlich können Sie dies beliebig komplexer gestalten, je nachdem, welche Informationen in Ihrer /etc/issueDatei enthalten sein sollen.

Sie können in diese Datei in Ihrer lokalen Entsprechung von /etc/rc.d/rc.local schreiben (die normalerweise nach allen anderen Startskripten ausgeführt wird).

larsks
quelle
5
Etwas mehr Linuxy zu sagenip address show eth0 | awk '/inet / {print $2}' | cut -d/ -f1
Sorpigal
Ich bin nicht sicher, wie das mehr Linux ist, aber ja, das funktioniert auch.
Larsks
1
@ Larks: Es ist mehr Linux, weil Linux ipdas Werkzeug ist, das Sie für diese Art von Dingen verwenden sollten. ifconfigist technisch nur aus Kompatibilitätsgründen.
Sorpigal
28

Fügen Sie unter CentOS 7 und Debian 8 (und vielleicht auch anderen) einfach die folgende Zeile an/etc/issue

My IP address: \4

und das wird auf die IPv4-Adresse des Computers aufgelöst. Wenn Sie über mehrere Netzwerkschnittstellen verfügen und eine bestimmte auswählen möchten, können Sie diese mit angeben

My IP address: \4{eth0}

Suchen Sie man gettyin Ihrer Distribution nach einer Liste der unterstützten Escape-Sequenzen.

PaoloC
quelle
Funktioniert auch auf CentOS 8 :)
Orsiris de Jong
Dies funktionierte perfekt auf meinem Centos 7 VM.
Kevin Mason
6

Dieses Skript fügt der /etc/issueDatei nach Bedarf IP-Adressen hinzu bzw. entfernt diese aus der Datei:

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

Wenn Sie eine Debian-basierte Distribution verwenden, platzieren Sie das Skript am besten an folgenden Stellen:

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

Auf diese Weise werden die Skripte jedes Mal ausgeführt, wenn eine Schnittstelle auf- oder abfällt. Das Einlegen /etc/rc.d/rc.localhat den Nachteil, dass es beim Booten nur einmal ausgeführt wird.

powpow
quelle
3
Für jeden, der in Red Hat / CentOS / etc sucht, wäre dieses Skript /sbin/if{up,down}-local. (Wenn es existiert, wird es von aufgerufen /etc/sysconfig/network-scripts/ip{up,down}-post.)
Aaron Copley
@powpow: Warum "Lokale IP-Adressen"? --all-ip-addressesgibt auch "öffentliche" IP-Adressen aus. Vielleicht macht so etwas wie "IP-Adressen aller externen Schnittstellen dieses Hosts:" mehr Sinn.
ypid
4

du kannst es einmal schreiben. Leider gibt es keine getty-Escape-Sequenz, um die IP-Adresse von eth0 anzuzeigen, aber es gibt eine Escape-Sequenz, die Sie in / etc / issue verwenden können, um den Hostnamen anzuzeigen: \ n

Sie können die IP des Computers jederzeit statisch in / etc / issue festlegen, indem Sie sie direkt in die Datei schreiben. Beachten Sie, dass die Datei /etc/issue.net für Remoteanmeldungen verwendet wird, sodass Sie diese möglicherweise auch bearbeiten möchten.

Nach der Arbeit im Terminalfenster verlieren Sie jedoch den Startbildschirm und die damit verbundenen IP- / Host-Adressinformationen. Der beste Weg ist, den Hostnamen in der Eingabeaufforderung (die meisten Linux-Distributionen tun dies) unter Verwendung von \ h oder \ H oder erneut festzulegen. Statische Festlegung der IP-Adresse, die Sie kennen, auf dem Host in der PS1-Variablen. Sie können die PS1-Variable in / etc / festlegen. Profil auf den meisten Linux-Distributionen.

user237419
quelle
1
Dies ist nur, um zu wissen, mit welcher IP nach dem Booten des VMs eine Verbindung hergestellt werden soll. Es reicht also aus, sie einzurichten, wie Larsks sagt :)
Bruno Lopes,
1

Vielen Dank an @larsks für die ersten Schritte. Ich stellte fest, dass ich Probleme hatte, das Skript fertigzustellen, bevor es benötigt wurde, sodass meine Ausgabedatei immer leer war. Also habe ich eine Pause von 1 Sekunde eingefügt und eine Schleife gemacht. Ich bin kein wirklicher Bash-Scripter. Wenn es also einen besseren Weg gibt, lassen Sie es mich bitte wissen. Ich habe ein hinzugefügt COUNT, um sicherzustellen, dass es nicht für immer wiederholt wird.

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

Ich habe dieses Skript eingefügt /etc/network/if-up.d/.

nomadic_squirrel
quelle
1

Systemd macht dies relativ einfach. systemctl edit getty@mit Inhalten wie:

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

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

h0tw1r3
quelle
0

Für jeden, der hier landet und Ubuntu 19.04 verwendet, habe ich die Antwort von @ powpow übernommen.

Ich habe die Datei erstellt: /etc/network/if-up.d/update-issuemit folgendem Inhalt:

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

Ich habe die Datei dann als ausführbar markiert: chmod 0755 /etc/network/if-up.d/update-issue

Funktioniert super!

Steve McDonald
quelle