Como atualizar o IP e o nome do host do Ubuntu via Bash

Existem várias maneiras de gerenciar o endereço IP e o nome do seu computador Ubuntu. Os administradores do sistema têm à sua disposição as ferramentas nmcli, netplan, hostname e hostnamectl. Embora essas ferramentas façam um bom trabalho por si mesmas, como você pode incluir essas ferramentas para aprimorar seu jogo de 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 irá se basear no outro. No final do artigo, você terá o conhecimento necessário para construir 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 no host Ubuntu.
  • A text editor, such as vim, nano, or VSCode.

Definindo o Nome do Host com hostnamectl

Cada host deve ter um nome único. Usando o comando hostnamectl você pode consultar ou alterar o nome do host. Neste caso, a sintaxe é como mostrado abaixo para mudar 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, você salva 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 em uma linha permite que 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 do 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 a configuração da sua rede em YAML permite que você comece a salvar ou fazer backup da sua configuração em um repositório Git. E como o Git oferece capacidades de rastreamento de alterações, você pode usar o mesmo arquivo de configuração sem ter que recriá-lo para futuros implantes usando pipelines de 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 irá colocar o novo arquivo de configuração no seu diretório home. A partir daqui, você irá 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 duplos e não tabulações para 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 este arquivo manualmente usando um editor de texto. Mas, você não precisa construir o arquivo manualmente.

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

Dica: Uma maneira de listar todas as informações da interface de rede no Ubuntu é executar 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

Há muitas outras propriedades que você pode definir, as quais 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 construir 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 o 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. Assume a imagem de nuvem do Ubuntu e a conta sudo padrão.
# Este script deve ser executado com sudo.
# Exemplo:
# sudo bash ~/host_deploy.sh

# Coleta de 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

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

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

# Aplica a configuração de rede ao arquivo de configuração yaml 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

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

# Aplica 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 tenham efeito.

Agora que você tem um script funcional no diretório do usuário, você poderia criar uma imagem dourada para reutilizar ou compartilhar 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 pode tentar usar este script com o Ansible e responder às perguntas usando um play do Ansible. As tarefas neste tutorial são apenas uma pequena amostra de itens de configuração inicial que você poderia começar a usar em seus scripts de construção e implementaçã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/