Есть ли способ определить псевдонимы хоста (например, в /etc/hosts
) для каждого пользователя, т.е. в файле /home/user/.hosts
?
Моя основная цель - легко обмениваться псевдонимами хостов через rsync между машинами в моей небольшой локальной сети. Поскольку нет машины, которая всегда была бы надежно подключена, DNS-сервер не подходит (верно?).
Спасибо.
Лучшим решением было бы установить Avahi и libnss-mdns, а затем использовать HOSTNAME.local
адреса.
Эти имена не будут назначаться для каждого пользователя, но решат поставленную вами задачу - иметь общие имена для всех машин в локальной сети.
Видеть https://github.com/figiel/hosts чтобы сделать именно то, что вы просите.
Это небольшая библиотека, загружаемая через LD_PRELOAD и переопределяющая gethostbyname () и несколько связанных функций, которые программы используют для разрешения DNS. У меня это хорошо работает. Единственное предостережение, которое я обнаружил, заключается в том, что веб-браузер Chrome не использует собственное разрешение DNS, а вместо этого реализует собственный DNS-клиент. Чтобы решить эту проблему, вам нужно отключить DNS-клиент Chrome.
Реализация glibc в Linux не может этого сделать.
Но вы можете расширить его с помощью библиотеки nss, которая могла бы. Это было бы легко написать, поскольку вы могли бы оторвать соответствующую часть libc, которая находится в каталоге nss_files в
http://ftp.gnu.org/gnu/glibc/glibc-2.5.tar.bz2
Например
Однако это было бы довольно странно и нестандартно.
Как описывают другие ответы на этой странице, есть способы достичь аналогичной функциональности, но:
Нет, нет файла для каждого пользователя, например /etc/hosts
или любой другой способ переопределить разрешение имен по умолчанию в качестве непривилегированного пользователя в GNU / Linux.
Если у вас есть две машины, которые будут работать большую часть времени, вы можете установить BIND на каждой из них и сделать их DNS-серверами ... или получить один из них (http://www.marvell.com/products/embedded_processors/developer/kirkwood/sheevaplug.jsp).
Используйте на нем BIND, чтобы всегда обслуживать DNS.
Казалось бы, намного проще написать сценарий, который определяет, какие хосты активны, а затем устанавливает имя хоста для следующей команды rsync. Что-то вроде этого
#!/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
Это не проверено и содержит предположения, поэтому вам придется изменить его в соответствии с требованиями.