La IP pública es aquella desde la que estamos saliendo a internet; la que conecta una red privada, como por ejemplo una red local, a la parte pública de internet. Hay muchos comandos en linux que permiten obtener este dato. El procedimiento siempre es el mismo: el comando consulta un servidor DNS, un servicio en internet, que le devuelve el dato. Personalmente prefiero usar host porque viene instalado por omisión en la mayoría de las distribuciones linux:
user@linux:~$ host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}'
Pero también se puede usar dig:
user@linux:~$ dig +short myip.opendns.com @resolver1.opendns.com
Wget:
user@linux:~$ wget -qO- http://ipecho.net/plain | xargs echo user@linux:~$ wget -qO - icanhazip.com
O curl:
user@linux:~$ curl ifconfig.co user@linux:~$ curl ifconfig.me user@linux:~$ curl icanhazip.com
Fuente: 4 Ways to Find Server Public IP Address in Linux Terminal