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