Seria de grande ajuda mesmo, afinal com uma rede grande com vários UNBT infectados isso seria muito bom.
Versão Imprimível
Seria de grande ajuda mesmo, afinal com uma rede grande com vários UNBT infectados isso seria muito bom.
Boa tarde.
Há um tópico[1] aqui no Under-Linux, que descreve um código em Python[2] e Paramiko[3], que demonstra como executar comandos SSH em lote, em diferentes dispositivos.
Uso essa combinação de ferramentas para distribuir regras de firewall, fazer upgrade/update de roteadores, entre outras coisas. Executar dois rm, um cfgmtd e um reboot, será suave.
Espero que o código seja útil.
[1] https://under-linux.org/f143/registrando-log-149969/
[2] http://www.python.org
[3] http://www.lag.net/paramiko/
Saudações,
Trober
boa tard trober, agradeco seus links e sua atencao. vi os topicos que vc participou falando sobre paramiko e ssh, ai dei mais uma googlada e meio que cheguei a uma conclusao, porem estou com 2 duvidas gostaria que vc me ajuda-se.
bom, instalei o paramiko no meu slackware que se comunica com as airgrids infectadas, segui o site e deu td certo vou postar aqui tbm:
$ wget http://www.lag.net/paramiko/download/paramiko-1.7.6.tar.gz
$ tar xzf paramiko-1.7.6.tar.gz
$ cd paramiko-1.7.6
$ python setup.py build
$ su -c "python setup.py install"
depois de instalado, eu tenho que criar um arquivo com a extensao
.py com os comandos dentro. bom entao pesquisando cheguei a esses
comandos, nao sei se esta certo, corrija caso esteja errado, coloquei
o nome de removewormlote.py com as seguintes linhas:
#!/usr/bin/env python
cmd1 = "rm /etc/persistent/rc.poststart"
cmd2 = "rm -rf /etc/persistent/.skynet"
cmd3 = "cfgmtd -w -p /etc/"
cmd4 = "reboot"
host = '192.168.100.0/24' ##SCOBO DA MINHA REDE AIRGRID!!???
user = 'ubnt'
passwd = 'ubnt'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user, password=passwd)
stdin, stdout, stderr = ssh.exec_command(cmd1)
stdin, stdout, stderr = ssh.exec_command(cmd2)
stdin, stdout, stderr = ssh.exec_command(cmd3)
stdin, stdout, stderr = ssh.exec_command(cmd4)
stdin.write(passwd + '\n')
stdin.flush()
print stdout.readlines()
ssh.close()
bom minha duvida é como comunico com tds os airgrids sem ter que colocar ip
de cada cliente, 1 por 1. no caso ai eu coloquei o scobo da rede toda
porem nao sei se vai funcionar!!! eh isso mesmo ou nao?
minha segunda duvida eh: como sao 3 comandos representei como cmd1, cmd2 e cm3.
vai funcionar ou tem que ser de outra maneira?
bom aguardo, muit obrigado pela ajuda ate agora.
Não é possível comunicar com todos ao mesmo tempo. É uma operação por lote. A conexão SSH é "um para um". O que você precisa, é ter uma arquivo (csv, xml, ini, txt), com os endereços IP de todos os seus clientes. O seu script lerá esse arquivo, e terá um referencial de conexão.
Não vai funcionar. Host é sempre /32 (em IPv4). Menos específico que isso é network. Como a conexão SSH é "um para um", não pode ser o escopo da rede.
Você pode usar de operadores lógicos do shell, como por exemplo: cmd1 && cmd2 && cmd3 && cmd. O operador && somente executará o comando subsequente se a ação anterior ocorrer com êxito (EXIT_STATUS == 0).
Se quiser usar mais comandos, ou caso um tenha o risco de EXIT_STATUS != 0 (como a remoção de um diretório que não existe mais), é melhor fazer um for, while , until, foreach, ou outro tipo de laço, para rodar os comandos.
Espero ter ajudado.
Saudações,
Trober
como faco isso? no caso eu crio um arquivo com toda a lista de ips, vamos supor, desculpe se estiver errado pois nao sou programador!!
vamo la, eu crio um arquiv com tds os enderecos de ip com o nome de listaips.txt (coloquei txt nao sei pq foi apenas um exemplo!), ai la dentro tem:
192.168.0.100
192.168.0.101
192.168.0.102 .... e assim vai tds as airgrids infectadas...
ai la no script, em host onde eu coloquei o escopo da rede, que esta errado, eu coloco o endereco onde se encontra esse arquivo txt??
ex.:
host= '/listaips.txt'
simples assim ou estou totalmente errado???? hehehe
agradeco a sua disposição...