Script Bash para atualizar vários servidores que não aceitam chaves RSA

1

No meu ambiente, gerencio cerca de 10 servidores Linux que exigem atualizações regulares de pacotes. Eu tenho um script escrito para se conectar a cada um individualmente e executar a atualização. Além disso, tenho chaves RSA instaladas em cada servidor. Aqui está o meu código:

hosts=(host1 host2 host3 host4)
read -sp "sudo password (will be used on all servers): " password && echo ""

for host in ${hosts[@]}
do
echo "-------------------------------------------$host----------------"
ssh -t $host "sudo -Sp '' apt-get update <<EOP && sudo apt-get upgrade -y
$password
EOP"
done

Meu objetivo é read em uma senha e ter a apt-get update executada sem aviso.

Atualmente, ao executar o script, sou avisado logo após a instrução echo de uma senha em cada sistema. Ao monitorar o arquivo /var/log/auth.log, não há entrada gerada até depois que eu insiro uma senha. (Eu esperaria uma tentativa de login com falha com a chave RSA).

Ao se conectar diretamente a cada servidor, as chaves RSA funcionam corretamente e podem ser verificadas, verificando o arquivo /var/log/auth.log. Usando tail -F /var/log/auth.log no servidor, posso ver que a solicitação de senha é para autenticação, em vez de usar a chave RSA.

Eu verifiquei:

  • Permissões no arquivo de identidade.
  • Usando -i para especificar um arquivo de identidade
  • usando o caminho completo para o arquivo de identidade.
  • adicionando 'user @' $ host ao comando ssh para forçar um usuário específico.
por Byron C. 12.03.2014 / 22:30

1 resposta

0

Acho que expect poderia ser a resposta. Esperar é uma ferramenta para automatizar aplicativos interativos, como telnet, ftp, passwd, fsck, rlogin, dica, etc. Espero que isso realmente torne isso trivial . A expectativa também é útil para testar esses mesmos aplicativos. E adicionando Tk, você também pode envolver aplicativos interativos em GUIs X11. Também dê uma olhada neste thread

    
por 12.03.2014 / 23:16

Tags