How to change localhost hostname name on GNU /
Linux
Often when some of my companies, I'm employed with rents
dedicated GNU / Linux servers co-located in data
centers,
usually the local
hostname is configured while the system is
being installed, therefore many times when we forget to tell the
Dedicated provider what kind of hostname, we're intending to use
they came up with some kind of hostname which is randomly set based
on the dedicated provider's company name or a server ID number.
Cosenquently the machine hostname assigned due to company local
server numbering policy.
Hence after one logs in to the newly purchased server with over SSH
protocol, then we end up with a hostname like for example:
server56663:~#
This hostname naming, often doesn't make much sense for the
services running on the server and doesn't have nothing to do to
the provided internet services by the server, however its really
important for me to orientate myself which server I have logged to.
Therefore one of the first things I do while configuring a new
server is to
change the local server assigned hostname
.
Besides having the
hostname shown by the shell prompt, there
is a quick command to print out the
Fully Qualified Domain
hostname, by issuing:
>server56663:~# hostname --fqdn
server56663.dedicompany.com
The Universal
GNU / Linux way which works on almost all
Linux distributions to
change the configured hostname goes like
this:
Edit /etc/hosts . A default
/etc/hosts file looks
something like:
server56663:~# cat /etc/hosts 127.0.0.1 localhost.localdomain
localhost
127.0.1.1 server56663.dedicompany.com server56663
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
On the
second line which assigns the hostname for the loopback
IP address 127.0.0.1 , you see the identifier for the local
hostname:
127.0.1.1 server56663.dedicompany.com
server56663
To
change that to a custom local hostname of choice, the
line should be modified to look like:
127.0.1.1 CustomHostName server56663.dedicompany.com
server56663
On some GNU / Linux distributions the line
127.0.1.1 might
be completely absent, this is the case with for example
CentOS and
Fedora and many other distros
On these Gnu / Linux distributions the
/etc/hosts might
looks like:
# Do not remove the following line, or various programs #
that require network functionality will fail. 127.0.0.1
localhost.localdomain localhost
Alas
on Fedora and CentOS and other distros to set the localhost
hostname, one more line should be added to /etc/hosts . The
line to add looks like so:
123.123.123.123 CustomHostName
After modification and adding the custom hostname name there the
file should look something like:
[root@centos ~]# cat /etc/hosts 127.0.0.1 localhost localhost
123.123.123.123 CustomHostName
After including correct records in /etc/hosts , next the
hostname command is used to change the localhost name
configured to show as a machine name on user ssh login:
server56663:~# hostname CustomHostName
server56663:~#
Further to check that the new hostname is set for all ssh sessions
incoming to the ssh server from now on the hostname command is used
without arguments:
server56663:~# hostname
CustomHostName
Even though now the hostname is changed to CustomHostName
still, the hostname for the current opened ssh session is keeping
the old hostname:
server56663:~# hostname
server56663
To see the hostname change in your shell prompt you will have to
logout and login again to the system.
Here its good to mention the Linux kernel has a variable
kernel.hostname, which can be used to set the local machine
hostname. Actually the hostname command automatically set
the kernel.hostname kernel variable.
If of course one want to change the kernel var directly without
using the hostname command, this can be achieved with
sysctl, e.g.:
server56663:~# sysctl
kernel.hostname=CustomHostName
On Debian GNU / Linux the way to change the hostname there is a
"debian way" approach:
Debian has a file /etc/hostname , which is there just for
the sake of configuring the system hostname. During system boot
process Debian reads /etc/hostname file and sets the machine
hostname to the word inside. The /etc/hostname file is being red
and configured by Debian's /etc/init.d/hostname.sh shell
script.
Therefore after changing the hostname in Debian by editting
/etc/honstmame , the /etc/init.d/hostname.sh needs to be invoked
for the new hostname to be set system wide, like so;
server56663:~# /etc/init.d/hostname.sh
Just like with other GNU / Linux distributions for the new hostname
to be active on the current shell a logout and login via ssh is
necessery again.
With Fedora, CentOS and other Redhat based distributions the
"proper" way to change the hostname is:
a. change the /etc/hosts way described above in the
aticle.
b. Edit /etc/sysconfig/network file and write inside the new
custom hostname.
[root@centos ~]# grep -i hostname
/etc/sysconfig/network
HOSTNAME=localhost.localdomain
After HOSTNAME value is set to the new desired hostname and file is
saved, the network script should be invoke with restart
argument:
[root@centos ~]# /etc/init.d/network restart
One
more thing to consider always when changing a hostname is that some
of the system services are using the configured local machine
hostname, and hence need to be restarted also from a active shell
where the new hostname is already set and active.
Since the system hostname is being configured usually, with the
rest of server configurations on system boot, after setting the
desired hostname it is a good idea to have a system reboot. This
will guarantee that all running daemons will read the newly set
hostname:
E.g.:
server56663:~# shutdown -r now
On next boot the hostname should be set to whatever you put as a
custom hostname.