Guida completa agli script: Modificare il nome dell’host su una macchina Linux

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

Ottieni l’accesso

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.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più su NinjaOne Endpoint Management, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

Guarda una demo×
×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.