Como desligar terminais via rede? [RESOLVIDO]

Iniciado por SESCSantana, 02 de Dezembro de 2009, 21:22

tópico anterior - próximo tópico

SESCSantana

Olá pessoal,

Meu problema é o seguinte, estou em uma lan com 20 micros rodando ubuntu. E eu queria de alguma forma poder desligar os terminais, que não possuem permissão de administração, pelo meu terminal.

Eu não sei se há alguma aplicação pronta para essa tarefa - provavelmente sim, mas não conheço -  se alguém souber, aceito a dica.
A outra opção que estava sondando era criar algum script para fazer essa tarefa, do tipo, o script no terminal recebe um comando via socket (udp) e executa o comando shutdown. Nessa alternativa o problema é que estou esbarrando no problema do sudo... que nos terminais sem permissão de administração, não vai funcionar... estou escrevendo o script em python, alguém sabe como contornar esse problema?

É isso, por favor aceito dicas? :)

valeu,
Paulo

raidicar

Poderia ser via ssh com chaves + script, dessa forma, não precisaria digitar a senha para acesso via ssh e não usaria o sudo, pois a conexão aos terminais seria feito com o usuário de root, que pode rodar o comando shutdown. Existe também alguma restrição ao root? Continuando...

1 - Instale o servidor ssh nos 20 micros: apt-get install openssh-server ou baixe o pacote.

2 - No seu terminal, como root, crie as chaves de acesso com os comandos:
ssh-keygen -b 4096 -t rsa
Será solicitado onde deve ser salva a chave, digite /root/.ssh/id_rsa caso esteja indicando outro diretorio.
Em seguida, será pedido para definir o passphrase, Não Defina, Apenas pressione ENTER.
Será solicitado para confirmar o passphrase, Pressione ENTER novamente.
Pronto, chaves criadas,

3 - Agora, a partir do seu terminal, é preciso dar dois comandos para cada um dos 20 micros.
scp /root/.ssh/id_rsa.pub root@IP:/root/.ssh/
ssh root@IP "cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys"

ps: Não é o caso, mas em algumas distros, não existe a pasta .ssh dentro de root mesmo com o servidor

Agora, do seu micro, basta dar um ssh root@IP que você acessa via ssh todos os micros da sua rede.

Agora é facil criar um script, ex:

#! /bin/bash
ip=1
endip=20
until [ $ip -gt $endip ]; do
ssh root@192.168.1.$ip "shutdown -h now"
ip=`expr $ip + 1`
done


Basta rodar o script que todos os micros do ip 192.168.1.1 ao 192.168.1.20 vão desligar.
Se tiver algum micro fora da rede ou desligado e quiser agilizar a velocidade do script, mude a linha do shutdown para
ssh -o ConnectTimeout=4 root@192.168.1.$ip "shutdown -h now"
Se em 4 segundos o micro não responder, ele passa pro proximo micro.

Dessa forma foi contornado o problema do "sudo", não é usado.
O comando shutdown é dado pelo root da propria maquina, não pelo root da sua maquina, contornado o problema de administração.

Esse, acho que é o jeio fácil, a menos que alguma outra coisa atrapalhe.
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

SESCSantana

Olá a todos!
raidicar muito obrigado!

Eu pesquisei sobre esses pontos e fiz um softwarezinho. Publiquei o resultado e um mini-tutorial no meu blog http://paulobarbeiro.com.br/blog/?p=52

Eu editei o sudoers para permitir que usuários não-administradores possam executar os comandos shutdown, init e reboot. E para mandar a ordem de desligar/reiniciar, usei Python... pq tenho mais intimidade mesmo.

Abraço a todos.

raidicar

Maravilha SESCSantana, mas tento evitar mexer no sudoers (tento, mas não consigo, ele já está uma salada).
Já salvei seu script, achei tudo mais trabalhoso, mas é seguro e ideal para quem quer aprender. Parabéns!
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

josneifernandes

ola, gostei do topico, muito facil de entender...

mas estou tendo um problema, eu digito o primeiro dos comandos que devo digitar pra cada umas das maquinas, conforme indicado, mas ele me da o seguinte resultado:
scp: /root/.ssh/: Is a directory

e qdo digito o segundo comando ele me traz o seguinte:
bash: /root/.ssh/authorized_keys: Arquivo ou diretório inexistente (mas ja verifiquei e o arquivo esta la).

O que pode estar errado?

Obrigado

zekkerj

Citareu digito o primeiro dos comandos que devo digitar pra cada umas das maquinas, conforme indicado, mas ele me da o seguinte resultado:
scp: /root/.ssh/: Is a directory
Certifique-se de não digitar um espaço entre o "root@IP:" e o "/root/.ssh". Lembre-se de trocar "IP" pelo endereço do terminal.

E por fim, lembre-se de que nem todo sistema tem um usuário root ativo.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Arthur Bernardes


josneifernandes

ehehehe... eu tinha deixado um espaço entre o ip e o : rsrs
Agora deu certo.
Valeu... Obrigado!