Pesquisa de site

Configure o login SSH sem senha para vários servidores remotos usando script


A autenticação baseada em chave SSH (também conhecida como autenticação de chave pública) permite autenticação sem senha e é uma solução mais segura e muito melhor do que a autenticação por senha. Uma grande vantagem do login sem senha SSH, e muito menos da segurança, é que ele permite a automação de vários tipos de processos entre servidores.

Neste artigo, demonstraremos como criar um par de chaves SSH e copiar a chave pública para vários hosts Linux remotos de uma só vez, com um script de shell.

Crie uma nova chave SSH no Linux

Primeiro, gere o par de chaves SSH (a chave privada/de identidade que um cliente SSH usa para se autenticar ao fazer login em um servidor SSH remoto e a chave pública armazenada como uma chave autorizada em um sistema remoto executando um servidor SSH) usando o ssh-keygen da seguinte forma:

ssh-keygen

Crie um script de shell para vários logins remotos

A seguir, crie um script de shell que ajudará a copiar uma chave pública para vários hosts Linux remotos.

vim ~/.bin/ssh-copy.sh

Copie e cole o seguinte código no arquivo (substitua as seguintes variáveis de acordo USER_NAME – o nome de usuário para se conectar, HOST_FILE – um arquivo que contém a lista de nomes de host ou endereços IP e ERROR_FILE – um arquivo para armazenar quaisquer erros de comando ssh).

#!/bin/bash
USER_NAME="root"
HOST_FILE="/root/hosts"
ERROR_FILE="/tmp/ssh-copy_error.txt"
PUBLIC_KEY_FILE="$1"

if [ ! -f  $PUBLIC_KEY_FILE ]; then
        echo "File '$PUBLIC_KEY_FILE' not found!"
        exit 1
fi

if [ ! -f $HOST_FILE ]; then
        echo "File '$HOST_FILE' not found!"
        exit 2
fi

for IP in `cat $HOST_FILE`; do
        ssh-copy-id -i $PUBLIC_KEY_FILE $USER_NAME@$IP 2>$ERROR_FILE
        RESULT=$?
        if [ $RESULT -eq 0 ]; then
                echo ""
                echo "Public key successfully copied to $IP"
                echo ""
        else
                echo "$(cat  $ERROR_FILE)"
                echo 
                exit 3
        fi
        echo ""
done

Salve o arquivo e feche-o.

Em seguida, torne o script executável com o comando chmod conforme mostrado.

chmod +x ssh-copy.sh

Agora execute o script ssh-copy.sh e especifique seu arquivo de chave pública como o primeiro argumento, conforme mostrado na captura de tela:

./ssh-copy.sh /root/.ssh/prod-rsa.pub

Em seguida, use o ssh-agent para gerenciar suas chaves, que mantém sua chave privada descriptografada na memória e a utiliza para autenticar logins. Após iniciar o ssh-agent, adicione sua chave privada a ele da seguinte forma:

eval "$(ssh-agent -s)"
ssh-add  ~/.ssh/prod_rsa

Faça login no servidor Linux remoto sem senha

Agora você pode fazer login em qualquer um dos seus hosts remotos sem fornecer uma senha para autenticação de usuário SSH. Dessa forma, você pode automatizar processos entre servidores.

ssh [email 

Isso é tudo que tínhamos para você! Se você tiver alguma contribuição a fazer especialmente para melhorar o script de shell, informe-nos através do formulário de feedback abaixo.