Punti chiave
- Automatizza la modifica del nome dell’host: Lo script semplifica il processo di modifica dei nomi degli host sui sistemi Linux, migliorando l’efficienza.
- Supporta diverse funzioni: Offre le opzioni per aggiornare il nome dell’host, il file dell’host, il nome predefinito e per riavviare il sistema.
- Convalida e controllo degli errori: Incorpora controlli per i comandi esistenti e convalida le modifiche per evitare configurazioni errate.
- Parsing degli argomenti facile da usare: Semplifica l’uso con argomenti chiari per le diverse funzionalità.
- Riduce l’errore umano: L’automazione riduce al minimo il rischio di errori manuali nel processo di modifica del nome dell’host.
- Migliora la gestione dell’IT: Uno strumento prezioso per i professionisti IT e gli MSP nella gestione di diversi dispositivi Linux.
- Script e metodi tradizionali: Offre un approccio più efficiente rispetto alla modifica manuale dei file di sistema.
- Sicurezza e protezione: Si consiglia di eseguire backup e test in ambiente controllato per garantire la stabilità della rete.
- Integrazione con gli strumenti di gestione: Evidenzia il vantaggio di integrare tali script in piattaforme come NinjaOne per semplificare le operazioni.
- Essenziale per la gestione della rete: Enfatizza il ruolo dello script nel mantenere l’uniformità e la sicurezza nella gestione della rete.
La gestione di una rete di dispositivi Linux comporta diverse operazioni, una delle quali è la modifica del nome dell’host di un dispositivo. Questa operazione, apparentemente semplice, svolge un ruolo cruciale nella gestione della rete e nell’identificazione dei dispositivi.
Background
Lo script in questione è progettato per cambiare il nome dell’host di un dispositivo Linux. È particolarmente importante per i professionisti IT e i fornitori di servizi gestiti (MSP) che gestiscono diversi dispositivi Linux. Questo script garantisce l’uniformità, facilita la gestione e contribuisce a migliorare le pratiche di sicurezza.
Lo script per la gestione del nome dell’host in Linux:
#!/bin/bash # Description: Change the hostname for a linux device (require's hostnamectl/systemd). Host file update expects the hostname to not be fully qualified. # # Release Notes: Initial Release # By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use. #Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. # Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. # Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. # Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. # Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. # Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. # EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA). # # Below are all the (case sensitive) valid parameters for this script. # Only the new computer name / pretty name is required! # Preset Parameter: "ReplaceWithNewComputerName" # Preset Parameter: "ReplaceWithNewComputerName" --update-hostfile # --update-hostfile: Will replace the non-fqdn in /etc/hosts with the name given in the script (will not un-fullyqualify it) # Preset Parameter: "ReplaceWithNewPrettyName" --prettyname-only # --prettyname-only: Set's the 'Pretty' name used by some applications. # Preset Parameter: "ReplaceWithNewComputerName" --restart # --restart: Restart's the machine after updating the hostname. This is required for the new name to take immediate effect. print_help() { printf '\n### Below are all the (case sensitive) valid parameters for this script. ###\n' printf '### Only the new computer name / pretty name is required! ###\n' printf 'Preset Parameter: "ReplaceWithNewComputerName" \n' printf 'Preset Parameter: "ReplaceWithNewComputerName" --update-hostfile \n' printf '\t%s\n' "--update-hostfile: Will replace the non-fqdn in /etc/hosts with the name given in the script (will not un-fullyqualify it)" printf 'Preset Parameter: "ReplaceWithNewPrettyName" --prettyname-only \n' printf '\t%s\n' "--prettyname-only: Set's the 'Pretty' name used by some applications." printf 'Preset Parameter: "ReplaceWithNewComputerName" --restart \n' printf '\t%s\n' "--restart: Restart's the machine after updating the hostname. This is required for the new name to take immediate effect." } # Determines whether or not help text is necessary and routes the output to stderr die() { local _ret="${2:-1}" echo "$1" >&2 test "${_PRINT_HELP:-no}" = yes && print_help >&2 exit "${_ret}" } # Commands required for this script required_cmds="hostnamectl sed sleep echo" for i in $required_cmds; do check=$(type -P "$i" 2>/dev/null) if [[ -z $check ]]; then _PRINT_HELP=yes die "FATAL ERROR: The command $i was not found and is required!" 1 fi done # THE DEFAULTS INITIALIZATION - OPTIONALS _arg_prettyname_only="off" _arg_update_hostfile="off" _arg_restart="off" typical="on" # Grabbing the parameters and parsing through them. parse_commandline() { while test $# -gt 0; do _key="$1" case "$_key" in --prettyname-only) typical="off" _arg_prettyname_only="on" ;; --update-hostfile) _arg_update_hostfile="on" ;; --restart) _arg_restart="on" ;; --*) _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1 ;; *) if [[ -z $_arg_name ]]; then _arg_name=$1 else _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1' but the new computername '$_arg_name' was already specified" 1 fi ;; esac shift done } # Initializes parameter processing parse_commandline "$@" if [[ -n $setHostnameTo ]]; then _arg_name=$setHostnameTo fi if [[ -n $forceRestart && $forceRestart == "true" ]]; then _arg_restart="on" fi if [[ -n $action ]]; then if [[ $action == "Set Pretty Name" ]]; then _arg_prettyname_only="on" typical="off" fi if [[ $action == "Set Hostname and Update Host File" ]]; then _arg_update_hostfile="on" fi fi # Old hostname to use when updating the hosts file or checking success old_name=$(hostname) # Error out on invalid combo if [[ $typical == "off" && $_arg_update_hostfile == "on" ]]; then _PRINT_HELP=yes die 'FATAL ERROR: --update-hostfile and --prettyname-only cannot be used together.' 1 fi # If the new computer name isn't given error out if [[ -z $_arg_name ]]; then _PRINT_HELP=yes die 'FATAL ERROR: No Computer Name was given! Please enter in the new name in the "Preset Parameter" box in Ninja! For Example "MyNewName".' 1 fi # If the typical use case is given proceed with changing the hostname if [[ $typical == "on" ]]; then pattern='^[a-zA-Z0-9]([a-zA-Z0-9-]{0,253}[a-zA-Z0-9])?$' if [[ $_arg_name =~ [^a-zA-Z0-9-] ]] || [[ ! $_arg_name =~ $pattern ]]; then _PRINT_HELP=yes die 'FATAL ERROR: Hostname has invalid characters or spaces. Hostname can only contain A-Z characters, Digits or Hyphens.' 1 fi # Converts the variables to lowercase prior to comparing them if [[ "${old_name,,}" == "${_arg_name,,}" ]]; then _PRINT_HELP=yes die "FATAL ERROR: The name $old_name is already set. Please enter a new name in the 'Preset Parameter' box in Ninja! For Example 'MyNewName'." 1 fi # Sets the hostname hostnamectl set-hostname "$_arg_name" # Sleep for a few seconds prior to checking that the change worked sleep 7 current_hostname=$(hostnamectl --static) # Checking if the hostname got set correctly if ! [[ "${current_hostname,,}" == "${_arg_name,,}" ]]; then _PRINT_HELP=no die "FATAL ERROR: Failed to set the hostname from $current_hostname to $_arg_name using hostnamectl is this a systemd system?" 1 else echo "Successfully updated the hostname to '$current_hostname'!" printf "\nWARNING: The displayname in Ninja will need to be manually updated however the 'Device Name' section will update itself.\n\n" fi # If requested to update the hosts file update it if [[ $_arg_update_hostfile == "on" ]]; then echo "Replacing $old_name in /etc/hosts with $_arg_name (if $old_name is in /etc/hosts at all)" sed -i "s/$old_name/$_arg_name/" /etc/hosts fi fi # If requested to update the pretty name update it if [[ $_arg_prettyname_only == "on" ]]; then current_hostname=$(hostnamectl --pretty) if [[ "${current_hostname,,}" == "${_arg_name,,}" ]]; then _PRINT_HELP=no die "FATAL ERROR: The pretty name $current_hostname is already set. Please enter a new name in the 'Preset Parameter' box in Ninja! For Example 'MyNewName'." 1 fi hostnamectl set-hostname --pretty "$_arg_name" sleep 7 current_hostname=$(hostnamectl --pretty) if ! [[ "${current_hostname,,}" == "${_arg_name,,}" ]]; then _PRINT_HELP=no die "FATAL ERROR: Failed to set the pretty name from $current_hostname to $_arg_name using hostnamectl is this a systemd system?" 1 else echo "Successfully updated the pretty name to '$current_hostname'!" fi fi if [[ $_arg_restart == "on" ]]; then echo "A restart was requested, restarting..." shutdown -r else echo "Please restart this computer at your earliest convenience." fi
Accedi a oltre 700 script nel Dojo di NinjaOne
Analisi dettagliata
Lo script funziona nel modo seguente:
- Controlli e parametri iniziali: Inizia controllando la presenza di comandi necessari come hostnamectl, sed, sleep ed echo. Se ne manca qualcuno, lo script emette un errore.
- Parsing degli argomenti: Lo script accetta vari argomenti per impostare il nuovo nome host, aggiornare il file host, impostare il nome di default o riavviare la macchina. Ogni argomento attiva azioni specifiche all’interno dello script.
- Impostazione e convalida del nome dell’host: Se si sceglie lo scenario tipico, lo script imposta il nuovo nome dell’host utilizzando hostnamectl e verifica la modifica.
- Aggiornamento del file hosts: Se richiesto, lo script aggiorna il file /etc/hosts con il nuovo nome dell’host.
- Aggiornamento del nome predefinito: Per aggiornare il nome “predefinito”, lo script utilizza nuovamente hostnamectl e convalida la modifica.
- Opzione di riavvio: Infine, lo script offre l’opzione di riavviare il computer per applicare immediatamente le modifiche.
Casi d’uso potenziali
Consideriamo un amministratore IT di una grande organizzazione incaricato di rinominare diversi server basati su Linux in seguito a un’iniziativa di rebranding. Utilizzando lo script, l’amministratore può automatizzare il processo, garantendo coerenza e risparmiando molto tempo.
Confronti
Tradizionalmente, la modifica di un nome dell’host comporta la modifica manuale di file come /etc/hostname e /etc/hosts, seguita da un riavvio del sistema. Lo script automatizza questi passaggi, riducendo il potenziale di errore umano e semplificando il processo.
Domande frequenti
- Lo script è compatibile con tutte le distribuzioni Linux?
- È stato progettato per i sistemi che utilizzano hostnamectl, comunemente presenti nelle distribuzioni moderne come Ubuntu, Fedora e CentOS.
- E se dovessi cambiare solo il nome “predefinito”?
- Utilizza l’argomento –prettyname-only. Salta le altre azioni e aggiorna solo il nome predefinito.
- Il riavvio del sistema è sempre necessario?
- Non sempre, ma un riavvio assicura la completa applicazione delle modifiche.
Implicazioni
Sebbene lo script faciliti la modifica del nome dell’host, un utilizzo non corretto può portare a configurazioni errate della rete. È fondamentale disporre di un meccanismo di backup e convalida adeguato per evitare di interrompere i servizi di rete.
Raccomandazioni
- Testa prima lo script in un ambiente controllato.
- Assicurati di disporre delle autorizzazioni appropriate prima di eseguire lo script.
- Esegui il backup dei file di sistema essenziali come /etc/hosts prima di apportare modifiche.
Considerazioni finali
Nel campo della gestione dei dispositivi, strumenti come NinjaOne forniscono una piattaforma completa per gestire in modo efficiente tali operazioni. L’integrazione di script all’interno dei sistemi può semplificare ulteriormente i processi di gestione IT, rendendo facili operazioni come la modifica dei nomi degli host, garantendo al contempo coerenza, e riducendo gli errori umani.