Назад | Перейти на главную страницу

Как настроить / etc / issues, чтобы отображать IP-адрес для eth0

У меня есть пара виртуальных машин Linux с мостовыми интерфейсами, и я бы хотел, чтобы IP-адрес машины отображался после загрузки машины (в логине, где обычно отображается версия и ядро).

Насколько я могу судить, сообщение взято из / etc / issues, но я не уверен, как и когда в него писать.

На CentOS 7 и Debian 8 (а может и другое), просто добавьте следующую строку в /etc/issue

My IP address: \4

и это разрешит IPv4-адрес машины. Если у вас есть несколько сетевых интерфейсов и вы хотите выбрать один конкретный, вы можете указать его с помощью

My IP address: \4{eth0}

Проверьте man getty для списка поддерживаемых escape-последовательностей в вашем дистрибутиве.

Это просто текстовый файл ... вы пишете в него так же, как отправляете текст в файл с помощью любого другого сценария оболочки. Что-то вроде этого заменит / etc / issue только на ваш IP-адрес:

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

Очевидно, вы можете сделать это произвольно более сложным, в зависимости от того, какую информацию вы хотите /etc/issue файл.

Вы можете записать в этот файл в своем локальном эквиваленте /etc/rc.d/rc.local (который обычно выполняется после всех других сценариев запуска).

Этот скрипт добавит / удалит IP-адреса в / из /etc/issue файл по мере необходимости:

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

Если вы используете дистрибутив на основе Debian, лучше всего разместить скрипт в следующих местах:

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

Таким образом, скрипты выполняются каждый раз, когда интерфейс запускается или отключается. Поместив его в /etc/rc.d/rc.local имеет недостаток в том, что он выполняется только один раз во время загрузки.

вы можете написать это один раз. к сожалению, нет escape-последовательности getty для отображения IP-адреса eth0, но есть escape-последовательность, которую вы можете использовать в / etc / issue для отображения имени хоста: \ n

вы всегда можете статически установить IP-адрес машины в / etc / issue, записав его прямо в файл. имейте в виду, что файл /etc/issue.net используется для удаленного входа в систему, поэтому вы также можете изменить его.

в любом случае, после работы в окне терминала вы потеряете начальный экран и информацию об адресе IP / хоста с ним. лучший способ - установить имя хоста в приглашении (большинство дистрибутивов Linux делают) с помощью \ h или \ H или снова, статически устанавливая IP-адрес, который, как вы знаете, установлен на хосте в переменной PS1, вы можете установить переменную PS1 в / etc / profile на большинстве дистрибутивов Linux.

Systemd делает это относительно легко. systemctl edit getty@ с содержанием вроде:

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

затем systemctl daemon-reload && systemctl restart getty@tty1

Большое спасибо @larsks за то, что начали. Я обнаружил, что у меня были проблемы с завершением скрипта до того, как он понадобился, поэтому мой файл проблемы всегда был пустым. Я добавил паузу в 1 секунду и зациклился. Я на самом деле не скриптер bash, поэтому, если есть лучший способ сделать это, дайте мне знать. Я добавил COUNT чтобы убедиться, что он не зацикливается вечно.

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

Я поместил этот скрипт в /etc/network/if-up.d/.

Для всех, кто приземляется здесь, кто использует Ubuntu 19.04, я в конечном итоге принял ответ @ powpow.

Я создал файл: /etc/network/if-up.d/update-issue со следующим содержанием:

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

Затем я пометил файл как исполняемый: chmod 0755 /etc/network/if-up.d/update-issue

Прекрасно работает!