LINUX.ORG.RU

Надоело, мне значит придумывать имена хоста

 


1

1

Написал такой скрипт:

#!/usr/bin/env bash
set -eo pipefail

default_hostname() {
  pc_type=`[ -d /sys/module/battery ] && echo laptop || echo desktop`
  random_chars=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 6 | head -n1`
  echo "${pc_type}-${random_chars}"
}

if [[ $EUID -ne 0 ]]; then
  echo "Please run as root" >&2
  exit 1
fi

new_hostname="${1:-`default_hostname`}"
old_hostname=`hostnamectl hostname`

if [ "$new_hostname" = "$old_hostname" ]; then
  echo "Same hostname" >&2
  exit 1
fi

hostnamectl hostname "$new_hostname"

if grep -q 127.0.1.1 /etc/hosts; then
  sed -ir 's/127\.0\.1\.1.*/127.0.1.1 '"$new_hostname"'/g' /etc/hosts
else
  echo "127.0.1.1 $new_hostname" >> /etc/hosts
fi

# демон, который позволяет найти машину в локальной сети по имени хоста
systemctl restart avahi-daemon

echo "Hostname changed: $old_hostname -> $new_hostname"

Оно работает:

~ 
➜ sudo set-hostname.sh
Hostname changed: laptop-i3OP39 -> laptop-RYBuKi

~ 
➜ sudo set-hostname.sh
Hostname changed: laptop-RYBuKi -> laptop-TWsYug

~ 
➜ sudo set-hostname.sh
Hostname changed: laptop-TWsYug -> laptop-Aw5d56

~
➜ sudo set-hostname.sh acer-laptop   
Hostname changed: laptop-Aw5d56 -> acer-laptop

~ 
➜ cat /etc/hosts           
127.0.0.1 localhost
127.0.1.1 acer-laptop

Но как победить это?

~ took 2s 
➜ vi ~/bin/set-hostname.sh    
_IceTransSocketUNIXConnect: Cannot connect to non-local host sergeym
_IceTransSocketUNIXConnect: Cannot connect to non-local host sergeym

Финальная версия скрипта с обновлениями

Не забудьте поставить лойс. Как применить новое имя без логаута, я не нашел

★★

Последнее исправление: tz4678 (всего исправлений: 3)
Ответ на: комментарий от WitcherGeralt

Кстати, есть множество способов отследить человека помимо мак-адреса и связать разные устройства в один профиль. Вплоть до того, что на входе в магазин ставят электромагнитные излучатели, сигнал которых ловят встроенные в фоновые службы приложений следилки, а затем сообщают куда надо. А у телефона есть IMEI, и видят его все приложения. А в какие-то учетки наш Джо вошел с телефона и домашнего компа. Еще в какие-то – с домашнего компа и с рабочего. Манипуляции с маком – это как рамки в торговых центрах: никого не защищают, но параноиков успокаивают.

Bagrov ★★★★★
()
Ответ на: комментарий от anonymous

если бы ещё государство с этим легко соглашалось :)

Harald ★★★★★
()
Ответ на: комментарий от tz4678

материнки, проца или серийник на корпусе?

Если бы только на корпусе, запусти lshw-gtk - многое узнаешь.
(мать и ssd с s/n и всё это видно простому юзеру, надо бы кому патчи к proc и sysfs написать, либо захардкорить права доступа, либо чтобы лишнее не изобретать просто добавить поддержку acl)

anonymous
()

Думал оно на Паскале будет написано.

urxvt ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Подсказка на будущее: у ноутбука есть модель, можно ничего не выдумывать, а у десктопа есть как минимум местоположение.

Тоже так пользуюсь: t420, t430, j4105, ...

urxvt ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.