Como Atualizar o IP e o Nome do Host no Ubuntu via Bash

Existem várias maneiras de gerenciar o endereço IP e o nome do seu computador Ubuntu. Os administradores de sistema têm à disposição as ferramentas nmcli, netplan, hostname e hostnamectl. Embora essas ferramentas funcionem bem por si só, como você pode incluí-las para melhorar sua automação?

Você pode criar um script Bash que lidará com a configuração para você. Neste artigo, você aprenderá como definir um novo nome de host e configurar informações de endereço IP, tudo com um script Bash que aceita entradas.

Cada exemplo se baseará no outro. No final do artigo, você terá o conhecimento necessário para criar um script de configuração totalmente funcional em Bash para uso em um host Ubuntu novo ou existente.

Pré-requisitos

Você não precisa ser um especialista em scripts de shell Bash para seguir este tutorial, mas certifique-se de ter os seguintes requisitos.

  • A host running on Ubuntu. This tutorial uses Ubuntu 22.04 LTS.
  • Privilégios de root para o host Ubuntu.
  • A text editor, such as vim, nano, or VSCode.

Configurando o Nome do Host com hostnamectl

Cada host deve ter um nome único. Usar o comando hostnamectl permite que você consulte ou altere o nome do host. Neste caso, a sintaxe é mostrada abaixo para alterar seu nome de host atual para o que você desejar.

sudo hostnamectl set-hostname "new-hostname"

Executando o comando hostnamectl com o parâmetro comum de set-hostname seguido por um valor de string entre aspas duplas como o novo nome do host. Se você estivesse executando este comando manualmente, ele deveria funcionar sem problemas.

Mas e se você quisesse colocar isso em um script que aceita entrada do usuário? Comece usando o comando read, seguido pelo parâmetro -p, que significa prompt, e uma string para instruir o usuário sobre o que inserir para este prompt. Em seguida, salve a entrada em uma nova variável, chamada NOVO_NOME_DO_HOST.

read -p "Please type the desired hostname: " NEW_HOSTNAME

Depois que o nome do host estiver armazenado na variável NOVO_NOME_DO_HOST, você pode fornecer a variável para o comando hostnamectl como no exemplo abaixo.

sudo hostnamectl set-hostname "$NEW_HOSTNAME"

E é isso! Combinar esses dois comandos de uma linha permite que os comandos funcionem em um script! Mas você tem uma tarefa adicional: configurar as opções de rede.

Configurando as Informações do Endereço IP com netplan

O comando netplan é o método de facto para gerenciar as informações de endereço IP de uma interface de rede para hosts Ubuntu modernos. A ferramenta netplan abstrai as configurações de rede de vários back-ends usando arquivos de configuração YAML.

A ferramenta netplan lê esses arquivos de configuração durante a inicialização do sistema e os aplica às interface(s) de rede de destino. Por que isso é importante, você pode perguntar?

Ter sua configuração de rede em YAML permite que você comece a salvar ou fazer backup da sua configuração para um repositório Git. E como o Git oferece capacidades de rastreamento de mudanças, você pode usar o mesmo arquivo de configuração sem precisar recriá-lo para implantações futuras usando pipelines CI/CD. Você sabe, DevOps!

Antes de adicionar linhas a um arquivo de configuração, você deve criar o arquivo de configuração usando o comando touch.

sudo touch ~/99-custom.yaml

O comando acima colocará o novo arquivo de configuração no diretório home. A partir daqui, você executará o comando echo para ecoar o que você digita e injetar isso no arquivo de configuração linha por linha usando a redireção de entrada para STDOUT > (adicionar) e >> (anexar).

Nota: Use dois espaços e não tabs para a indentação em YAML.

echo "network:" > ~/99-custom.yaml
echo "  ethernets:" >> ~/99-custom.yaml
echo "    enp0s31f6:" >> ~/99-custom.yaml
echo "      dhcp4: false" >> ~/99-custom.yaml
echo "      addresses:"
echo "       - [$IP_ADDRESS]" >> ~/99-custom.yaml
echo "      routes:"
echo "       - to: default"
echo "         via: $GATEWAY_ADDRESS" >> ~/99-custom.yaml
echo "      nameservers:" >> ~/99-custom.yaml
echo "        addresses: [$PRIMARY_DNS_ADDRESS, $SECONDARY_DNS_ADDRESS, 208.67.222.222, 208.67.220.220]" >> ~/99-custom.yaml
echo "  version: 2" >> ~/99-custom.yaml

Com cada comando echo, você constrói a configuração YAML usando espaçamento apropriado redirecionando a entrada usando STDOUT. Alternativamente, você poderia construir esse arquivo manualmente usando um editor de texto. Mas, não é necessário construir o arquivo manualmente.

Em vez disso, solicite ao usuário que insira as informações de endereço IP de que você precisa usando o mesmo comando read.

Dica: Uma maneira de listar todas as informações da interface de rede no Ubuntu é executando o comando ip address.

read -p "Now type the IP address in CIDR notation, i.e. 192.168.1.1/24: " IP_ADDRESS
read -p "The gateway IP: " GATEWAY_ADDRESS
read -p "The primary DNS IP: " PRIMARY_DNS_ADDRESS
read -p "And finally, the secondary DNS IP: " SECONDARY_DNS_ADDRESS

Existem muitas outras propriedades que você pode configurar, mas este tutorial não aborda em detalhes. Se desejar ver propriedades comuns adicionais, certifique-se de ler as páginas do manual do netplan.

Com as opções de rede concluídas, é hora de criar um único script!

Colocando Tudo Junto em um Script Bash

Agora, você irá combinar tudo em um único script Bash com o que aprendeu nas seções anteriores. Abra seu editor de escolha, cole o código abaixo e salve o arquivo como ~/host_deploy.sh.

#! /usr/bin/env bash
# host_deploy.sh
# Descrição:
# Para uso com o modelo ovf do Ubuntu Server. Pressupõe imagem em nuvem do Ubuntu e conta sudo padrão.
# Este script deve ser executado com sudo.
# Exemplo:
# sudo bash ~/host_deploy.sh

# Coletar entrada do usuário
read -p "Please type the desired hostname: " NEW_HOSTNAME
read -p "Now type the IP address in CIDR notation, i.e. 192.168.1.1/24: " IP_ADDRESS
read -p "The gateway IP: " GATEWAY_ADDRESS
read -p "The primary DNS IP: " PRIMARY_DNS_ADDRESS
read -p "And finally, the secondary DNS IP: " SECONDARY_DNS_ADDRESS

# Definir um novo nome de host
sudo hostnamectl set-hostname "$NEW_HOSTNAME"

# Criar um novo arquivo de configuração yaml do netplan
sudo touch ~/99-custom.yaml

# Aplicar configuração de rede ao arquivo de configuração yaml do netplan
# Fazendo algumas suposições aqui sobre o nome do adaptador
echo "network:" > ~/99-custom.yaml
echo "  ethernets:" >> ~/99-custom.yaml
echo "    enp0s31f6:" >> ~/99-custom.yaml
echo "      dhcp4: false" >> ~/99-custom.yaml
echo "      addresses:"
echo "       - [$IP_ADDRESS]" >> ~/99-custom.yaml
echo "      routes:"
echo "       - to: default"
echo "         via: $GATEWAY_ADDRESS" >> ~/99-custom.yaml
echo "      nameservers:" >> ~/99-custom.yaml
echo "        addresses: [$PRIMARY_DNS_ADDRESS, $SECONDARY_DNS_ADDRESS, 208.67.222.222, 208.67.220.220]" >> ~/99-custom.yaml
echo "  version: 2" >> ~/99-custom.yaml

# Copiar a configuração personalizada para a pasta netplan e aplicar
sudo cp ~/99-custom.yaml /etc/netplan/99-custom.yaml

# Aplicar a nova configuração
sudo netplan apply

# Lembrete para reiniciar para redefinir o estado
echo "Please restart to complete host deployment!!"

Para executar o script, execute o comando abaixo para invocar o script com bash no seu terminal.

sudo bash ~/host_deploy.sh

O script solicita que você insira um novo nome de host e informações de endereço IP e lembra que você precisa reiniciar o host para que as alterações entrem em vigor.

Agora que você tem um script funcional no diretório do usuário, você pode criar uma imagem de referência para reutilização ou compartilhamento com técnicos e aqueles que rotineiramente realizam esta tarefa.

Conclusão

Parabéns! Você chegou ao final do artigo e construiu um script Bash totalmente funcional que você pode usar repetidamente.

Você também poderia tentar usar este script com Ansible e responder às perguntas usando um play do Ansible. As tarefas deste tutorial são apenas uma pequena amostra dos itens de configuração inicial que você poderia começar a usar em seus scripts de construção e implantação.

Agora você sabe como aceitar a entrada do usuário, definir parâmetros básicos do sistema usando um script Bash e aplicar essa técnica para alterar nomes de host e endereços IP no Ubuntu Linux.

Source:
https://adamtheautomator.com/change-linux-ip-hostname-bash-script/