在运行 Linux Mint(17.1 Rebecca,Cinnamon 64 位)的计算机上将主机名更改为随机的字母数字字符集时,我遇到了一些问题。
以下脚本将主机名更改为一组随机的字母数字字符:
#!/bin/bash
### BEGIN INIT INFO
# Provides: randomhostname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Changing hostname to random value
# Description: Changing hostname to random value
### END INIT INFO
old=$(cat /etc/hostname)
new=$(tr -dc 'A-Z0-9' < /dev/urandom | head -c12)
sed -i "s/$old/$new/g" /etc/hosts
sed -i "s/$old/$new/g" /etc/hostname
exit 0
理想情况下,主机名的更改可以在不重新启动系统的情况下实现,但由于/etc/init.d/hostname.sh start
必须在之后执行,并且该文件不存在于该版本的 Linux Mint 中(不确定其他版本),因此我必须重新启动系统才能进行更改才能生效。因此,在启动时执行此操作似乎是我目前的下一个最佳选择。
我将文件移动到/etc/init.d/目录并使其可执行sudo chmod +x randomhostname
。之后我将其添加到启动序列中sudo update-rc.d randomhostname defaults
。
当我重新启动系统并登录 Linux Mint 时,我可以看到主机名的更改/etc/主机名和/etc/主机,在本例中是YKNG7Z4PJD7H
。但是,在使用终端(即用户名@BFZJ7LB0BKAD)时我没有看到这一点,并且在使用 sudo 时收到以下消息:
username@BFZJ7LB0BKAD ~ $ sudo true
sudo: unable to resolve host BFZJ7LB0BKAD
我认为这个问题是由于脚本在错误的时间执行的(可能在某些服务已经启动之后)并且系统尚未重新启动以使之前的更改生效而引起的。
将这样的脚本添加到启动序列中以使更改生效而无需再次重新启动的正确方法是什么?或者有更好的方法来实现这一目标吗?
我非常感谢有关这个问题的任何帮助。
解决方案
作为罗埃马指出,我只需hostname "$new"
在脚本末尾添加即可使更改生效。我还添加了网络管理器服务的停止和启动,以强制客户端使用新主机名向网络注册。
#!/bin/bash
### BEGIN INIT INFO
# Provides: randomhostname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Changing hostname to random value
# Description: Changing hostname to random value
### END INIT INFO
service network-manager stop
old=$(cat /etc/hostname)
new=$(tr -dc 'A-Z0-9' < /dev/urandom | head -c12)
sed -i "s/$old/$new/g" /etc/hosts
sed -i "s/$old/$new/g" /etc/hostname
hostname "$new"
service network-manager start
exit 0
答案1
重写后您似乎没有设置主机名/etc/hostname
。这应该可以解决问题,在两sed
行后面添加:
hostname "$new"
如果您使用 DHCP 并且这没有解决问题,请查看我更改了主机名,为什么我的 bash PS1 提示符没有变化看看这是否与您的情况相关。
“Rebecca”使用systemd
,用于设置主机名的文件是/etc/init/hostname.conf
。如何添加您的更改主机名脚本写入systemd
是我将留给另一个问题的东西(更常见的是“读者练习”)。
答案2
你可以改变线路
new=$(tr -dc 'A-Z0-9' < /dev/urandom | head -c12)
为此,请创建 6 到 20 个字符的随机主机名
new=$(tr -dc 'A-Z0-9' < /dev/urandom | head -c$((6 + $RANDOM % 20)))
答案3
在 systemd 上你可以使用:hostnamectl set-hostname $new