Queridos! Sim, estou sumido, mas é por conta de que estava trabalhando com outras ferramentas, mas voltei para o querido mundo Linux. Então, vamos voltar as nossas postagens sempre que possível, beleza? Então, segue o enterro :)
Situação
Estamos testando uma ferramenta, e foi necessário levantar algumas máquinas Linux. Criei 40 máquinas virtuais usando o CentOS (openSUSE me perdoe, mas a instalação do CentOS é muito rápida), e em determinado momento, foi identificado que o firewall dessas máquinas deveria ser desabilitado, além de que, era preciso colocar o nome das máquinas no arquivo /etc/hosts.
Problema
Acessar as máquinas remotamente e executar os comandos:
echo "127.0.0.1 $(hostname).intranet.cliente.br" >> /etc/hosts
chkconfig iptables off
iptables -F
Solução
Que eu teria de usar o ssh não era novidade, mas o problema é ter de passar a senha, isso seria desgastante. Eu precisava de uma forma de fazer essa entrada automaticamente. Me veio na cabeça o expect, mas esse cara nunca funcionou direito comigo (mesmo seguindo a risca cada tutorial).
Me bati com o sshpass pela webs, que resolveu minha vida (nesse momento e futuramente quando surgir a necessidade!)
Segue o comando:
for i in $(seq 10 1 54); do \
sshpass -p MinhaSenha ssh -oScrictHostKeyChecking=no 10.0.1.$i 'echo 127.0.0.1 $(hostname).intranet.cliente.br >> /etc/hosts'; done
Explico o necessário
O laço é por conta de que as máquinas estão do endereço IP 10.0.1.10 até o 10.0.1.54, conforme setado no escopo do dhcp. Como somente o último octeto varia, eu fiz um for que incrementa de um em um, começando do 10 e indo até o 54.
O sshpass vai passar a senha para o ssh quando for solicitado, mas só isso não resolve nosso problema, já que o ssh quando acessa uma máquina em que ainda não aceitou suas chaves, vai questionar isso pelo terminal. É aí que entra as opções do -o. Usando o parâmetro -oScrictHostKeyChecking=no, eu digo que ele não deve verificar as chaves naquele momento, e, daí pra frente, é só seguir com os comandos.
O echo 127.0.0.1 $(hostname).intranet.cliente.br >> /etc/hosts eu acho que ficou bem auto-explicativo, mas, pra quem não entendeu, eu estou adicionando no arquivo de hosts, o nome da máquina + o domínio.
Creio que não é necessário explicar o chkconfig iptables off (desabilitar o serviço iptables) e o iptables -F (limpar as regras do iptables) dentro do laço.
Então é isso galera. Essa linha me ajudou PRACARALHO e vai me ajudar muito quando for preciso acessar máquinas remotamente.
Observações
No meu caso, funcionou de maneira simples por conta de que as senhas das máquinas estão iguais. Mas, nada impede de que você tenha um .csv ou até mesmo uma lista com login e senha, e daí o seu script/one-liner cate cada parâmetro e encaminhe para o sshpass e o ssh. Tudo vai de sua imaginação e habilidade.
0 comentários:
Postar um comentário
Só não vale xingar a mãe ou puxar cabelo nos comentários =)