How can I display my machine's IP address on a TTY login screen?

The server I administrate has a dynamic IP address assigned by DHCP, which is inconvenient. When I want to SSH into it, I have to first log in by hand and use ifconfig to find its current IP address. Thankfully, it lives about two feet from where I sit.

I know how to edit /etc/issue to show different values before the login prompt is delivered to the display, but I’d like to know if it’s possible for /etc/issue to display the current IP address of eth0 (re-evaluated at boot time) so that I can see it and then ssh in without having to log in to run ifconfig.

Asked By: arthropodSeven


/etc/issue is unfortunately a plain text, it has some options you can add to it (see man agetty) but not the IP address of eth0.

If you put this in /etc/rc.local:

IP=$(/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
echo "eth0 IP: $IP" > /etc/issue

Then you will see something like this:

myServer login:
Answered By: Alex R

Building on Alex’s answer and Rebs’ comment, this is what I have for my /etc/rc.local file (only relevant lines):

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 %snn%s %snn" "$PRE_MSG" 'n' 'l' "$IP_MSG" "$IP" > "/etc/issue"

The printf command does the magic. Unfortunately putting the 'n' and 'l' inside the format string ended up replacing the first one with the new line character and the /etc/issue file was messed up.

So long story short, these 4 lines keep the original info displayed by /etc/issue file and add the Server IP Address: message.

And as Rebs’ said, keep in mind that every time you reboot the server, this script will override the /etc/issue file, so maybe try it inside a different script and on a different file and once it’s working, transfer the changes over…

Good luck and happy BASHing 🙂

Answered By: nurchi

As of Debian 8/jessie you can use the 4 and 6 escape characters to output the IPv4 and IPv6 addresses. So the /etc/issue file:

Debian GNU/Linux 8 n l

eth0: 4{eth0}

Would output something like the following at the login console:

Debian GNU/Linux 8 myserver tty1

myserver login:

I imagine Ubuntu would provide similar functionality (at least in newer releases)

Answered By: jerrykan

With systemd you can do systemctl edit getty@ with something like:

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'

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

Answered By: h0tw1r3

For Ubuntu 19.04, I followed these steps:

I created the file: /etc/network/if-up.d/update-issue with the following contents:

PREFIX="Ubuntu 19.04 - dev"
IPADDRS=$(hostname -I | tr " " "n" | grep -v "^$" | sort -t . -k 1,1n | head -1 | tr "n" " ")
echo "$PREFIXnnIP: $IPADDRSn" > /etc/issue

I then marked the file as executable: chmod 0755 /etc/network/if-up.d/update-issue

Works great!

Answered By: Steve McDonald

Building on Nurchi, Alex and Steve’s answers & the comment from Reb,

The following will grep the old IP out and add in any non local (127.) IP addresses.
My server is a VM and doesn’t have eth0.
Testing on Ubuntu 18.04

Place in /etc/network/if-up.d/update-issue

MSG=$(cat /etc/issue | grep -v IP)
IP=$(/sbin/ifconfig | grep 'inet' | grep -v '127' | cut -d: -f2 | awk '{ print $2 }')
printf "%sn%snn" "$MSG" "IP: $IP" > /etc/issue

Then chmod 0755 /etc/network/if-up.d/update-issue

The only difference between my answer and Steve’s is the addition of the grep lines to remove the IP line, capture the message and readd it along with the new/updated IP

Answered By: agrath

This works for ubuntu 20.04 LTS as well.
Just make sure you’re using the right interface. The output of ifconfig will show all interfaces, update the same interface in /etc/issue

enter image description here

Answered By: NRJ
Categories: Answers Tags: , , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.