Файл хостів користувача


16

Чи існує спосіб визначення псевдонімів хоста (наприклад, у /etc/hosts) на основі кожного користувача, тобто у файлі /home/user/.hosts?

Моя основна мета - легко ділитися псевдонімами хостів за допомогою rsync між машинами в моєму маленькому лан. Оскільки немає машини, яка б надійно завжди була підключена, DNS-сервер - це не варіант (правда?).

Дякую.


2
Ух ти. Я збирався опублікувати це те саме питання, але я бачу, що у вас є. Для мене це має сенс, але, як не дивно, його немає в Linux. У моєму випадку на моєму пристрої Samsung Galaxy Tab у мене в'язана форма Linux з ОС Android, і через мою веб-розробку мені часто потрібно редагувати / etc / hosts. У засудженому Linux не можна редагувати / etc / hosts. Отже, ~ / .хости були б дуже крутими, безумовно!
ServerChecker

чи знайшли ви врешті-решт якесь рішення?
quamis

На жаль ні. Можливо, це неможливо, оскільки це загроза безпеці.
mrucci

1
Для SSH ви можете використовувати псевдоніми як часткове вирішення. Помістіть alias ssh="ssh "свій .bashrc (відмітьте пробіл пробілів в кінці псевдоніма) разом із, alias myhost="me@real-name-of-my-host.com"і тоді ви можете сказати, ssh myhostі він спрацює.
Ной Суссман

Кращим підходом для вирішення проблеми буде введення запису у ваш текст, ~/.ssh/configде ви додаєте рядки: Host my-hostта Hostname 10.0.0.xxx<- IP машини. Приємно те, що він також дозволяє вказати ім’я користувача, порт, який ключ використовувати тощо
Ciprian Tomoiagă

Відповіді:


8

Кращим рішенням буде встановити Avahi та libnss-mdns, а потім використовувати HOSTNAME.localадреси.

Ці імена не користуватимуться користувачем, але вирішать поставлену задачу мати загальні назви для всіх машин у локальній мережі.


Чи є спосіб вказати HOSTNAMES.local у локальному файлі (на користувача), а не в / etc / avahi / hosts?
mrucci

Я думаю, що Тедді означає, що кожна машина матиме ім'я, яке відкриє Avahi. Чи має дійсно відрізнятися відображення від машини до імені, залежно від користувача?
pjc50

ні, вона не повинна змінюватися на основі кожного користувача. Мені просто потрібен метод для спільного використання псевдонімів хоста (таким чином, який дозволяє мені робити ping hostnameAlias) без привілеїв root. Avahi майже правильно виконати роботу, тому що я можу використовувати машину $ HOSTNAME як псевдонім. Тільки для цікавості: де робиться це картографування?
mrucci

3

Дивіться https://github.com/figiel/hosts, щоб дізнатися, як зробити саме те, що ви просите.

Це невелика бібліотека, завантажена через LD_PRELOAD і яка переосмислює gethostbyname () та кілька пов'язаних з ними функцій, які програми використовують для роздільної здатності DNS. Це добре працює для мене. Єдине застереження, яке я знайшов, - це те, що веб-браузер Chrome не використовує вбудовану роздільну здатність DNS, а натомість реалізує власний клієнт DNS. Щоб вирішити цю проблему, потрібно вимкнути DNS-клієнт Chrome .


2

Реалізація glibc Linux не може цього зробити.

Але ви можете розширити його за допомогою бібліотеки nss, яка могла б. Це було б легко записати, оскільки ви могли зірвати відповідну частину libc, яка знаходиться в каталозі nss_files в

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

Наприклад

Однак це було б досить дивно нестандартною справою.


0

Якби у вас були дві машини, які б працювали більшу частину часу, ви могли б встати BIND на кожну з них і зробити їх серверами DNS .. або отримати одну з них ( http://www.marvell.com/products/embedded_processors/ розробник / kirkwood / sheevaplug.jsp ).

Використовуйте BIND на ньому, щоб обслуговувати ваш завжди на DNS.


0

Як описано в інших відповідях на цій сторінці, існують способи досягнення подібної функціональності, але:

Ні, /etc/hostsу GNU / Linux не існує жодного файлу "на кожного користувача", як і будь-який інший спосіб змінити роздільну здатність імені за замовчуванням як непривілейований користувач.


-1

Здавалося б, набагато простіше написати сценарій, який визначає, які хости є, а потім встановлює ім'я хоста для наступної команди rsync. Щось на зразок цього

#! / usr / bin / sh

HOST = "немає"
TESTFILE = / tmp / testfile. $$
торкніться $ TESTFILE
для я в hosta hostb hostc olivia
робити
    scp $ TESTFILE $ i: / tmp
    якщо [$? -ек 0]
    потім
        HOST = $ i
    фі
зроблено
rm $ TESTFILE

якщо [$ HOST! = "немає"]
потім
    echo $ HOST працює
    rsync -av --rsh = ssh файли $ HOST: / dest
ще
    відлуння "Не знайдено жодного хоста"
    вихід 1
фі

Це не перевірено і має припущення, тож вам доведеться його модифікувати відповідно до цього.


Дякую за відповідь, але я намагався вирішити ще одну проблему: як зберігати та ділитися списком імен хостів (hosta hostb hostc olivia) у домашній папці користувача, щоб я могла писатиrsync src olivia:/dst
mrucci
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.