Executar Scripts Remotamente

Muitas vezes, em uma rede, laboratório ou em um cluster (ou até mesmo de um único computador para outro), é necessário rodar um script remotamente e temos de contornar a senha do SSH.
Com o presente artigo e os respectivos scripts, executaremos scripts remotamente.

[ Hits: 153 ]

Por: Buckminster em 02/01/2026


Seção do Script com Chave ( OPÇÃO COM CHAVE SSH)



SCRIPT executa-geral-chave.sh

Agora temos o script executa-geral-chave.sh onde não tem a senha, pois configuramos o SSH para trabalhar com chave (é mais seguro).

Pré-requisitos (feito uma única vez)

Gera chave SSH (se ainda não existir):

$ ssh-keygen -t ed25519

Copia a chave para os hosts/nós:

$ ssh-copy-id usuario@no01

Ou:

$ ssh-copy-id usuario@192.168.1.100

Teste:

$ ssh usuario@no01

Ou:

$ ssh usuario@192.168.1.100

Não pedirá senha.

Configurar sudo sem senha no nó remoto:

$ sudo visudo -f /etc/sudoers.d/usuario

Coloque dentro do arquivo:

$ usuario ALL=(ALL) NOPASSWD: ALL

Crie o arquivo executa-geral-chave.sh (ou dê o nome que quiser) com seu editor de texto preferido e coloque dentro (copie e cole o código ou faça o download do arquivo):

#!/bin/bash

# ============================================
# Executa outros scripts por SSH com chave
# Compatível com Debian | Fedora | RHEL | Arch
# e derivados
# ============================================

# Requisitos:
# Gere a chave SSH
# $ ssh-keygen -t ed25519
# Copie para os hosts/nós
# $ ssh-copy-id usuario@no01 e/ou ssh-copy-id usuario@192.160.1.100
# Teste:
# ssh usuario@no01 e/ou ssh usuario@192.168.1.100
# Não deve pedir senha
# Configure sudo sem senha no host/nó remoto, somente com chave
# $ sudo visudo -f /etc/sudoers.d/usuario
# Coloque dentro do arquivo
# usuario ALL=(ALL) NOPASSWD: ALL
# Defaults:usuario !requiretty

# Caminho do script local a ser executado remotamente (modifique aqui)
SCRIPT_PATH="$HOME/caminho_diretorio/scripts/script.sh"

# Verifica se o script existe
if [ ! -f "$SCRIPT_PATH" ]; then
    echo "Script local não encontrado: $SCRIPT_PATH"
    exit 1 # Encerra o script caso o arquivo não exista
fi

# Nome do script
SCRIPT="$(basename "$SCRIPT_PATH")"
DESTINO="/opt/scripts/$SCRIPT"

# Lista de hosts/nós (modifique conforme necessário)
# Para vários hosts/nós: ("no01" "no02" "no03" "no04" ...)
NODES=("no01")

# Loop sobre cada host/nó
for NODE in "${NODES[@]}"; do
    echo ">>> Enviando $SCRIPT para $NODE..."

    # Copia script para /tmp
    # scp = secure copy (copia arquivos via SSH)
    # -o BatchMode=yes = evita prompts de senha; falha se não houver autenticação por chave
    scp -o BatchMode=yes "$SCRIPT_PATH" "$NODE:/tmp/" || {
        echo "Falha ao copiar para $NODE"
        continue # Pula para o próximo host/nó em caso de erro
    }

    # Cria o diretório, move e dá permissão
    # ssh = conecta via SSH e executa comandos no host/nó remoto
    # -o BatchMode=yes = impede que ssh peça senha; útil para scripts automatizados
    ssh -t -o BatchMode=yes "$NODE" "
        set -e # encerra o ssh se algum comando falhar
        sudo mkdir -p /opt/scripts # cria diretório de destino se não existir
        sudo mv /tmp/$SCRIPT $DESTINO # move o script para o destino final
        sudo chmod +x $DESTINO # torna o script executável
		
	# Validação do bash, altere para tuas necessidades
    	   if [ ! -x /bin/bash ]; then
        	echo \"Erro: /bin/bash não encontrado ou não executável\"
        	exit 1
    	   fi

    # Executa o script remotamente com ou sem argumento adicional
    # Caso quiser colocar argumento adicional, se souber o que está fazendo
    # Senão deixe como está
    if [ \"$SCRIPT\" == \"pvfs2-dist-keys.sh\" ]; then
        sudo /bin/bash $DESTINO /opt/orangefs
    else
        sudo /bin/bash $DESTINO # executa o script remoto sem argumentos
    fi

    # === LIMPEZA ===
    # Apaga o script da máquina remota após a execução (comente a linha abaixo, caso queira)
    sudo rm -f $DESTINO

    " || {
	# Vermelho negrito: \033[31m
	echo
        echo -e "\033[1;31mERRO AO EXECUTAR NO HOST/NÓ $NODE!!!\033[0m"
        continue # pula para o próximo host/nó em caso de erro
    }
    # Azul negrito: \033[1;34m
    # Azul forte: \033[38;5;39m
    echo
    echo -e "\033[1;34mSCRIPT EXECUTADO COM SUCESSO EM $NODE!!!\033[0m"
    echo
done

Salve e saia.

Dê permissão de execução.
Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Seção do Script com Senha (OPÇÃO COM SENHA SSH)
   3. Seção do Script com Chave ( OPÇÃO COM CHAVE SSH)
   4. Como Utilizar
   5. Bônus
Outros artigos deste autor

Squid - Entendendo um pouco as configurações

Tradução do artigo do filósofo Gottfried Wilhelm Leibniz sobre o sistema binário

Compilação de Kernel

Permissões do Linux

Compilação do Kernel

Leitura recomendada

Instalando MRTG + rrdtool no Slackware 12.0

Tutorial de instalação e pós-instalação do openSUSE Leap 42.2

Instalação do Nagios no Ubuntu Linux

Instalando Gnome DropLine (Slackware 10.2+)

Sabayon 5.0 - Transformando Sabayon 4.0r1 em Sabayon 5.0 "Full" (parte 2)

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts