Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

Is there a way to define host aliases (like in /etc/hosts) on a per user basis, i.e. in a file /home/user/.hosts ?

My primary objective is to easily share host aliases via rsync between the machines in my small lan. Since there is no machine that will be reliably always connected, a DNS server is not an option (right?).

Thank you.

share|improve this question
2  
Oh wow. I was about to post this same question, but I see you have. It makes sense to me, but strangly it doesn't exist on Linux. In my case I have a jailed form of Linux with Android OS on my Samsung Galaxy Tab device, and because of my web development I often need to edit /etc/hosts. In a jailed Linux, you can't edit /etc/hosts. So, a ~/.hosts would be really cool to have, definitely! –  ServerChecker Dec 26 '10 at 3:51
    
did you find any solution in the end? –  quamis Oct 26 '11 at 6:37
    
Unfortunately not. Maybe it is not possible because it's a security threat. –  mrucci Oct 26 '11 at 7:18
1  
For SSH, you can use aliases as a partial workaround. Put alias ssh="ssh " in your .bashrc (note the trailing whitespace at the end of the alias) along with alias myhost="me@real-name-of-my-host.com" and then you can say ssh myhost and it will work. –  Noah Sussman Jul 11 '12 at 20:40

5 Answers 5

up vote 8 down vote accepted

A better solution would be to install Avahi and libnss-mdns, and then use HOSTNAME.local addresses.

These names would not be per-user, but would solve your stated objective of having common names for all machines across a LAN.

share|improve this answer
    
Is there a way to specify the HOSTNAMES.local in a local file (per-user) rather than in /etc/avahi/hosts ? –  mrucci Nov 30 '09 at 6:13
    
I think Teddy means that each machine would have a name which Avahi would discover. Should the machine-to-name mapping really vary on a per-user basis? –  pjc50 Nov 30 '09 at 11:10
    
no, it should not vary on a per-user basis. I just need a method for sharing host aliases (in a way that allows me to do ping hostnameAlias) without root privileges. Avahi almost do the right job, because I can use the machine $HOSTNAME as an alias. Just for curiosity: where this mapping is done? –  mrucci Dec 1 '09 at 8:26

The Linux glibc implementation can't do that.

But you could extend it with a nss library which could. This would be easy to write as you could rip off the relevant part of libc which is in the nss_files directory in

http://ftp.gnu.org/gnu/glibc/glibc-2.5.tar.bz2

For instance

This would, however, be a rather weird nonstandard thing to do.

share|improve this answer

See https://github.com/figiel/hosts for a way to do exactly what you ask.

That is a small library, loaded via LD_PRELOAD and which overrides gethostbyname() and several related functions that programs use for DNS resolution. It works well for me. The only caveat that I found is that Chrome web browser does not use native DNS resolution, but instead implements its own DNS client. To solve that problem you need to disable Chrome's DNS client.

share|improve this answer

If you had two machines that would be up most of the time you could stand up BIND on each of them and make them the DNS servers..or get one of these (http://www.marvell.com/products/embedded%5Fprocessors/developer/kirkwood/sheevaplug.jsp).

Use BIND on it to serve up your always on DNS.

share|improve this answer

It would seem much easier to write a script which works out which hosts are up, and then sets the hostname for the following rsync command. Something like this

#!/usr/bin/sh

HOST="none"
TESTFILE=/tmp/testfile.$$
touch $TESTFILE
for i in hosta hostb hostc olivia
do
    scp $TESTFILE $i:/tmp
    if [ $? -eq 0 ]
    then
    	HOST=$i
    fi
done
rm $TESTFILE

if [ $HOST != "none" ]
then
    echo $HOST is up
    rsync -av --rsh=ssh files $HOST:/dest
else
    echo "No host found"
    exit 1
fi

This is untested, and has assumptions, so you'll have to modify it to suit.

share|improve this answer
    
Thank you for the answer but i was trying to solve another problem: how to store and share the list of host names (hosta hostb hostc olivia) in a user home folder, such that I can write rsync src olivia:/dst –  mrucci Nov 29 '09 at 15:24

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.