시작 시 Linux Mint 데스크탑의 호스트 이름을 임의의 값으로 변경

시작 시 Linux Mint 데스크탑의 호스트 이름을 임의의 값으로 변경

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

관련 정보