Tentando fazer o script

1

Antes de tudo, preciso dizer que não sou programador, mas preciso fazer algo baseado em programação ... Meu problema é que preciso modificar os servidores DNS em quase 1000 equipamentos de nanostation. Eu tenho acesso a eles através do ssh e quero fazer um script para realizar a tarefa. Eu já fiz um arquivo com os endereços IP de todos os CPE's (chamado client.txt). Acho que meu roteiro pode começar assim:

#!/bin/bash
for host in $(cat client.txt);
do
  ssh Administrador@$host sameforall;
  sed 's/x.x.x.x/y.y.y.y /etc/resolve.conf;
  sed 's/w.w.w.w/z.z.z.z /etc/resolve.conf;

  # here I restart network service but I don't have the command yet
done

y.y.y.y e z.z.z.z são os novos servidores DNS e x.x.x.x e w.w.w.w os antigos

Eu sei que isso está longe de ser correto, mas preciso que alguém me ajude. O primeiro problema que vou encontrar é que o ssh me pede para colocar a chave ssh do servidor no meu arquivo known_hosts, como posso resolver isso?

Alguém por favor pode me ajudar?

    
por gasparmenendez 18.04.2017 / 20:20

2 respostas

3

Primeiro de tudo você precisa configurar um par de chaves ssh pública / privada, para conectar-se a cada host via ssh sem senha. Você pode conferir este link e seguir alguns passos simples.

AFAIK você tem duas alternativas. Você pode criar um par de chaves pública / privada em cada servidor e, em seguida, importar a chave pública gerada de cada host em seus hosts conhecidos do "servidor mestre". A outra alternativa é o contrário: você pode gerar um par de chaves pública / privada em seu host mestre. E, em seguida, coloque essa chave privada em cada host.

Então você pode executar qualquer comando assim:

while read MY_HOST ; do ssh $MY_HOST "ANY_COMMAND" < /dev/null; done < client.txt

Ambas as soluções são bastante complicadas no seu caso, porque você tem um grande número de hosts. Uma possível solução alternativa ( que só funcionaria se todas as nanostations tivessem o mesmo nome de usuário / senha ) forçaria o script a usar um nome de usuário / senha de texto simples. Se esta for uma alteração de um tiro e você não estiver realizando nenhuma alteração como essa no futuro, isso pode ajudar:

while read MY_HOST ; do sshpass -p 'YourPassword' ssh user@$MY_HOST "ANY_COMMAND" < /dev/null; done < client.txt

Por favor, consulte este link: Login SSH com senha de texto claro como parâmetro

CONSELHO

Se você estiver executando algumas tarefas de gerenciamento em um farm tão grande de dispositivos, considere usar algumas ferramentas de automação de TI, como Ansible ou Puppet , ou pelo menos gerar um par de chaves ssh quando você implanta uma nova nanostation.

EDIT - Exemplo de script

Este script simples registrará a saída em um arquivo de texto, assim você saberá exatamente qual dos hosts não funcionou (talvez para conectividade ou erro de senha). Você pode querer melhorar o script analisando o erro e determinando a causa.

#!/bin/bash

echo "" > connFailed.log

while read MY_HOST;
do  < /dev/null;

    sshpass -p 'YourPassword' ssh user@$MY_HOST "ANY_COMMAND" > /dev/null 2>&1
    if [ $? != 0 ] ; then
            echo "[ERROR] Unable to connect to: " $MY_HOST >> connFailed.log
    fi

done < client.txt
    
por 18.04.2017 / 21:58
1

The first problem I'm going to find is that ssh prompts me to put the given servers ssh key to my known_hosts file, how can I solve this???

Como com muitas coisas, lendo o manual. O manual man ssh irá encaminhá-lo para o manual man ssh_client para o arquivo de configuração de configurações do cliente ssh ~/.ssh/config (mas você também pode ajustar as configurações do cliente por meio de opções de linha de comando) a seguinte configuração:

StrictHostKeyChecking

If this flag is set to yes, ssh(1) will never automatically add host keys to the ~/.ssh/known_hosts file, and refuses to connect to hosts whose host key has changed. This provides maximum protection** against trojan horse attacks, though it can be annoying when the /etc/ssh/ssh_known_hosts file is poorly maintained or when connections to new hosts are frequently made. This option forces the user to manually add all new hosts. If this flag is set to no, ssh will automatically add new host keys to the user known hosts files.
If this flag is set to ask, new host keys will be added to the user known host files only after the user has confirmed that is what they really want to do, and ssh will refuse to connect to hosts whose host key has changed. The host keys of known hosts will be verified automatically in all cases. The argument must be yes, no, or ask. The default is ask.

    
por 18.04.2017 / 20:50