Configurar 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 a 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 SSH sem senha, sem falar na 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 vez, com um script de shell.

Crie uma nova chave SSH no Linux

Primeiro, gere o par de chaves SSH (a chave privada/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- comando keygen da seguinte forma:

# ssh-keygen

Crie um script de shell para vários logins remotos

Em seguida, 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 com 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 [email protected]$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 ssh-agent para gerenciar suas chaves, que mantém sua chave privada descriptografada na memória e a usa para autenticar logins. Depois de iniciar o ssh-agent , adicione sua chave privada a ele da seguinte maneira:

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

Login no servidor Linux remoto sem senha

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

# ssh [email protected]

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.