Este script foi parte de uma resposta a uma pergunta de como trocar a senha remotamente, via ssh, sem precisar digitá-la.
O problema é que o passwd aguarda que se digite duas vezes a senha e não aceita por entrada padrão e nem por parâmetro. A solução, meio suja, foi editar remotamente na mão o /etc/shadow
#!/bin/bash
# Script para trocar senha remotamente (do root) via ssh
# Nova Senha
SENHA="teste123"
# Gerando o HASH Md5 desta senha (usado no Linux)
HASHMD5="`mkpasswd -H md5 $SENHA`"
# Como o binario passwd exige que se digite a senha duas
# vezes e nao aceita entrada padrao e nem parametros,
# a ideia eh editar MANUALMENTE o /etc/shadow, plantando
# o HASH do root no lugar certo
# Arquivo de hash temporario
TEMP="/tmp/novoSHADOW"
# Agora este escript faz BACKUP do /etc/shadow
# O backup sera salva com o nome /etc/shadow-ANODIAMES-SEGUNDOS
BACKUP="/etc/shadow-`date "+%y%m%d-%s"`"
echo $HASHMD5
# Arquivo com numeros IPs?
if [ -f servidores.txt ]
then
SERVIDORES="`cat servidores.txt`"
else
SERVIDORES="192.168.0.3 192.168.0.2"
fi
# Agora vem o ssh. Neste caso quem executar o script devera
# digitar a senha de login antiga do ssh, a menos que se
# esteja realizando autenticacao via chave publica (sem senha)
for Ip in $SERVIDORES
do
echo "Tentando trocar a senha em $Ip"
(
cat << END
cp /etc/shadow $BACKUP
echo -n 'root:${HASHMD5}:' > $TEMP
grep "^root:" /etc/shadow | cut -d: -f3- >> $TEMP
grep -v "^root:" /etc/shadow >> $TEMP
mv -f $TEMP /etc/shadow
END
)|ssh root@${Ip} 2>/dev/null
echo "Senha trocada no servidor $Ip"
done
# FIM
[7] Comentário enviado por Tacioandrade em 02/04/2013 - 17:59h
Amigo muito bom seu script, no caso estou precisando fazer algo parecido, modificar a senha de vários usuários de um servidor (com os nomes deles em um arquivo), porem não está funcionando, será que você poderia me ajudar. Segue o meu script.
TEMP="/tmp/novoSHADOW"
for line in $(cat /root/users); do
echo -n '$(line):3e07wfVPM39Oo:' > $TEMP
grep "^$(line):" /root/shadow | cut -d: -f3- >> $TEMP
grep -v "^$(line):" /root/shadow >> $TEMP
mv -f $TEMP /root/shadow1
done
No arquivo /root/users, segue o seguinte padrão:
cobrancalsa
gil
roseli
vinicius
franfrio
franfrios
conexao
mail
gilsonecialtda
patriciaoliveira
pbola
# AutomaticPasswdMulti
# Bruno Kammers - 15/10/2015
# Coloque sua senha nova aqui
PASS="xxxxxxx"
for i in `cat servers.txt` ; do
ssh root@$i '(echo $PASS ; echo $PASS) | passwd USUARIO'
done
---------------------------------------------------------------------
Neste caso, criar um arquivo servers.txt no mesmo path onde salvou este script, contendo os ips que deseja alterar;
Será solicitado a senha para cada conexão, a não ser que você tenha configurado chaves de permissão...