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: 130 ]

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

Compilando kernel no Debian Squeeze

Compilação do Kernel

Instalação do PAP (PostgreSL, Apache2 e PHP7) no Debian Jessie

Manual do IPtables - Comentários e sugestões de regras

Customizar a Instalação do Linux Debian com Preseed

Leitura recomendada

Instalando o Gentoo 2018

Instalação do servidor Nagios 3 no Debian

Instalando o VMWare Server no Ubuntu 7.04 (e/ou similares)

Drivers de impressão para clientes com Windows 7/XP

Comandos para redes wifi

  
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