Сервер, которым я управляю, достаточно неудобно, имеет динамический IP-адрес, назначаемый DHCP. Однако удобный противовес заключается в том, что он установлен примерно в двух футах от того места, где я сижу. Я знаю, как отредактировать / etc / issue, чтобы показывать другие значения, до того, как приглашение входа в систему будет доставлено на дисплей, но я хотел бы знать, возможно ли для / etc / issue отображать текущий IP-адрес eth0 (переоценен во время загрузки), чтобы я мог видеть его, а затем войти в ssh без необходимости входа в систему, чтобы запустить ifconfig.
/etc/issue
, к сожалению, представляет собой простой текст, в нем есть некоторые опции, которые вы можете добавить к нему (см. man agetty
), но не IP-адрес eth0.
Если вы поместите это в /etc/rc.local
:
IP=$(/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
echo "eth0 IP: $IP" > /etc/issue
Тогда вы увидите что-то вроде этого:
eth0: 192.168.0.2
myServer login:
Начиная с Debian 8 / jessie, вы можете использовать escape-символы \4
и \6
для вывода адресов IPv4 и IPv6. Таким образом, файл /etc/issue
:
Debian GNU/Linux 8 \n \l
eth0: \4{eth0}
выведет что-то вроде следующего на консоли входа в систему:
Debian GNU/Linux 8 myserver tty1
eth0: 192.168.1.100
myserver login:
Я думаю, что Ubuntu обеспечит аналогичную функциональность (по крайней мере, в более новых версиях)
С помощью 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
Основываясь на ответе Алекса и комментарии Ребса, вот что у меня есть для моего файла /etc/rc.local
(только соответствующие строки):
PRE_MSG="Ubuntu 14.04.3 LTS" # this is from the original /etc/issue
IP=$(/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
IP_MSG="Server IP Address:"
printf "%s %s %s\n\n%s %s\n\n" "$PRE_MSG" '\n' '\l' "$IP_MSG" "$IP" > "/etc/issue"
Команда printf
делает волшебство. К сожалению, размещение '\n'
и '\l'
внутри строки формата закончилось заменой первого символом новой строки, и файл /etc/issue
был испорчен.
Короче говоря, эти 4 строки сохраняют исходную информацию, отображаемую в файле /etc/issue
, и добавляют сообщение Server IP Address:
.
И, как сказал Ребс, имейте в виду, что каждый раз, когда вы перезагружаете сервер, этот скрипт переопределяет файл /etc/issue
, поэтому, возможно, попробуйте его внутри другого скрипта и в другом файле, и, как только он заработает, перенесите меняется над ...
Удачи и счастливого BASHing:)
Основываясь на Nurchi, Alex и ответах Steve & комментарий от Ребе,
следующее будет grep старый IP и добавлять в любом не локальном (127). IP-адреса. Мой сервер является VM и не имеет eth0. При тестировании на Месте Ubuntu 18.04
в /etc/network/if-up.d/update-issue
#!/bin/sh
MSG=$(cat /etc/issue | grep -v IP)
IP=$(/sbin/ifconfig | grep 'inet' | grep -v '127' | cut -d: -f2 | awk '{ print $2 }')
printf "%s\n%s\n\n" "$MSG" "IP: $IP" > /etc/issue
Затем chmod 0755 /etc/network/if-up.d/update-issue
единственной разницей между моим ответом и Steve является добавление grep строк, чтобы удалить строку IP, получить сообщение и повторно добавить его наряду с новым/обновленным IP
Для Ubuntu 19.04 я выполнил эти шаги:
я создал файл: /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
Работает отлично!