O nome do host é armazenado em /etc/hostname
Onde address
é uma lista de seus endereços IP:
for A in 'cat address' ; do NODE="node'echo $A | cut -d. -f4'" ; ssh $A "echo $NODE > /etc/hostname" ; done
Para cada IP, cortamos o último campo, prefixamos com "node" e escrevemos para / etc / hostname
Agora, isso deve funcionar, mas só funcionará se o usuário tiver privilégios de gravação para / etc / hostname, que por padrão, os usuários padrão não têm no Ubuntu.
O que você pode fazer é alimentar sua senha para o sudo via STDIN; por exemplo. echo "password" | sudo -S
; note que isso é não seguro , porque você deixará sua senha no histórico do shell. Encontre-o com o comando history
e exclua-o com history -d <historyId>
.
Não escreva sua senha em um arquivo de texto simples em sua pasta pessoal ...
Então, totalmente
for A in 'cat address' ; do
NODE="node'echo $A | cut -d. -f4'"
ssh $A "echo 'myPassword' | sudo -S echo $NODE > /etc/hostname"
done
- editar
Se você quiser reescrever o arquivo hosts em cada máquina, você pode adicionar um pouco de awk à mixagem; substitua o padrão 127\.0\.0\.
por um que realmente corresponda à sua sub-rede. Ele gravará as linhas restantes do arquivo intocadas.
/^127\.0\.0\./ {
split($1, quads, /\./)
print $1 "\tnode" quads[4]
next
}
{ print $0 }
Isso substituirá todos os nomes de host dos endereços IP em sua sub-rede por "nodeN", em que N é o último quad do endereço IP.
Portanto, adicionamos esses comandos ao loop for A
acima (compactando o script awk em uma única linha e caracteres de escape, conforme necessário). Nós não precisamos ser root para ler /etc/hosts
, mas precisamos ser root para substituí-lo depois que escrevemos a sua substituição para /tmp
ssh $A "awk '/^127\.0\.0\./ { split(\, quads, /\./) ; print \ \"\tnode\" quads[4] ; next } { print \for A in 'cat address' ; do NODE="node'echo $A | cut -d. -f4'" ; ssh $A "echo $NODE > /etc/hostname" ; done
}' /etc/hosts > /tmp/hosts.new"
ssh $A "echo 'myPassword' | sudo -S mv /etc/hosts /etc/hosts.old"
ssh $A "echo 'myPassword' | sudo -S mv /tmp/hosts.new /etc/hosts"