:::: MENU ::::
Mostrando postagens com marcador shellscript. Mostrar todas as postagens
Mostrando postagens com marcador shellscript. Mostrar todas as postagens

segunda-feira, 18 de dezembro de 2017

Um amigo me perguntou como ele conseguiria identificar quais máquinas eram windows na nossa rede, daí, me veio na cabeça um parâmetro bem simples, que é o TTL de resposta do ping.

Se esse valor não for alterado, máquinas windows respondem com 128, e alguns gatos pingados, com 127.

Com isso em mente, então a solução ficou simples: Pingo em todo o range da rede, e quem responder com ttl=128 ou ttl=127, é Windows.

Isso daria um script, mas dá pra fazer em uma linha. Vejamos:

raul@lizard:~> for i in $( seq 254 ); do ping -c 1 192.168.0.$i | egrep -q '127|128' ; if [ $? == 0 ];  then tput setaf 2; echo "192.168.0.$i é windows"; tput sgr0; else tput setaf 1; echo "192.168.0.$i não é windows"; tput sgr0; fi; done

Ah, uma lista completa com os TTL você pode achar aqui: https://subinsb.com/default-device-ttl-values/

E só isso. Abraço!



terça-feira, 24 de maio de 2016

Queridos! A coisa toda é simples. Vou deixar um template aqui pra vocês colocarem seus scripts como serviço e pararem de usar o útil nohup. Outra coisa: Seu script DEVE TER perfil de serviço. Não estou falando de um monte de comandos um embaixo do outro, beleza?
Pra facilitar, vou sublinhar as linhas que vocês devem alterar.


[Unit]
Description=Hubot
Requires=network.target
After=network.target
[Service]
Type=simple
WorkingDirectory=/home/butis/hubot
User=sobutis
Restart=always
RestartSec=10
EnvironmentFile=/etc/hubot/variaveis.conf
ExecStart=/home/butis/hubot/bin/hubot -a rocketchat

[Install]
WantedBy=multi-user.target


Eu acho que o conteúdo é bastante explicativo, mas, vamos explicar assim mesmo. Nesse exemplo, vamos criar um usuário que executará o hubot.

1. Precisamos criar um usuário pra rodar esse serviço, por questões de segurança.
adduser hubot

Nós não vamos definir o shell dele como /bin/false, porque é um script, ou seja, ele precisa do bash/ksh/sh para executar os comandos.

2. Coloque o script no diretório do usuário criado - isso é meio que lógico né?

3. Crie o arquivo hubot.service dentro de /etc/systemd/system.  Repare: {nome do serviço}.service. Pegou o padrão? Ok!

O Conteúdo é esse daí de cima. Vamos comentar linha a linha pra entendermos.


[Unit]
Description=Hubot 

Descrição do serviço
 

Requires=network.target
Dependências. O seu serviço depende de algum outro?
 

After=network.target
Ordem de execução. O serviço só será iniciado após o outro definido estar rodando.

[Service]
Type=simple
WorkingDirectory=/home/butis/hubot

Diretório de execução do seu serviço.

User=sobutis

Restart=always
RestartSec=10

Caso o serviço não inicie, ele tentará reiniciar de acordo com o estabelecido nas regras de Restart.

EnvironmentFile=/etc/hubot/variaveis.conf

Como meu script possui várias variáveis, eu preferi carregá-las em um arquivo separado. Defina suas variáveis nele.

ExecStart=/home/butis/hubot/bin/hubot -a rocketchat

Comando de execução do script. Coloque o path inteiro.

[Install]
WantedBy=multi-user.target 


Terminado o arquivo, execute um reload nas confs do systemd:
systemctl daemon-reload

E inicie o serviço
systemctl start hubot

Podemos deixar que ele inicie junto com os outros serviços:
systemctl enable hubot


Prontinho. Com esse modelo vocês já podem colocar qualquer script pra rodar como serviço sem dor de cabeça. Como informação adicional, recomendo a leitura de um documento da Red Hat, muito bem explicado por sinal:
 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Unit_Files.html

E um guia pra quem ainda tem medo do systemd
E isso aí. Abraços!

terça-feira, 15 de dezembro de 2015

Seria vergonhoso da minha parte não citar o grande mestre Aurélio, de onde eu sempre tiro alguma coisa pra me ajudar. Devo muito ao site desse cara.
Se você quer aprender MESMO shellscript, recomendo seguir as dicas dele.
Sem mais.



Aqui tem o canivete dele, super útil! Deixe uma cópia no seu smartphone, vai ajudar ;)
http://aurelio.net/shell/canivete
--
Vou tentar sempre referenciar alguns bons materiais aqui. Fiquem ligados.
Abs!

sexta-feira, 4 de dezembro de 2015

Isso é útil em scripts, quando você quer que a saída padrão (STDOUT) seja emitida na tela e também seja anexada em um arquivo. Você pode fazer isso de duas maneiras:

1. Emitindo a saída duas vezes, sendo que a primeira vai direto para o STDOUT e depois você emite a mesma saída, mas dessa vez jogando para um arquivo ( > ou >> file.txt). Esse funciona melhor quando é usado o comando echo.
2. Usando o comando tee. Maneira mais simples.

Comando tee
O tee lê da entrada padrão (STDIN) e escreve na saída padrão (STDOUT) e arquivos, como a própria manpage descreve.


DESCRIÇÃO
        Copia a entrada padrão para cada arquivo, e também para a saída padrão.

       -a, --append
               anexa aos arquivos, não sobrescrevendo

       -i, --ignore-interrupts
              ignora sinais de interrupção

       --help mostra essa saída e sai

       --version
              mostra a versão e sai

       Se FILE é -, copie novamente para a saída padrão (standard output).

AUTORES
       Escrito por Mike Parker, Richard M. Stallman, e David MacKenzie.


Exemplo:

[root@digestor var]# du -sh * | tee -a file.txt
561M    cache
8.0K    db
8.0K    empty
4.0K    file.txt
4.0K    games

[root@digestor var]# cat file.txt
8.1G    .
561M    cache
8.0K    db
8.0K    empty
4.0K    file.txt
4.0K    games

[root@digestor var]#


Mas aí alguém pode dizer: Ô! Isso eu faço usando o > ou >>. É, faz, mas não vai conseguir jogar na tela e no arquivo ao mesmo tempo.

Use o tee para criar seus arquivos de log, fica muito prático.

Abs!

quinta-feira, 3 de dezembro de 2015

Fala queridos!

Fiz esse script para preparar os hosts que receberão o agente do HP Data Protector de lá da empresa.
Percebam que ele:
Permite que o host servidor (de onde você vai executar os comandos) consiga logar no host cliente sem autenticação
Edita arquivos
Envia arquivos
Instala pacotes
Configura serviços

Tenham esse script como referência. Mudem como preferir. Usem a criatividade! :)


#!/bin/bash
# Instala software cliente de backup
# Raul Libório, raul.liborio@solutis.com.br
# 1.0

AUTH_KEYS_DIR="/root/.ssh"
AUTH_KEYS="$AUTH_KEYS_DIR/authorized_keys"
AUTH_ID="$AUTH_KEYS_DIR/id_rsa.pub"
DNSCLIENTE=$1
PASSWD="asdfghjklç"
SSH="sshpass -p "$PASSWD" ssh -o "StrictHostKeyChecking=no" root@$DNSCLIENTE"
SCP="sshpass -p "$PASSWD" scp -o "StrictHostKeyChecking=no""
DEPENDENCIAS="yum -y install xinetd rpm libstdc++ rsh-server glibc rsync"
RESPOSTA_OK="$( date ) - Iniciando instalacao no cliente $DNSCLIENTE"
RESPOSTA_NO="$( date ) - Instalacao cancelada pelo usuario $USER no host $DNSCLIENTE"
RESPOSTA_HOST_ERR="Use o FQDN do host. Exemplo: $(nslookup $DNSCLIENTE | awk /name/'{print $NF}')"
LOG="/var/log/hp_dataprotector_shell-installer.log"

# Testa se $1 recebeu um nome de host valido - o HP Data Protector so aceita FQDN
echo $1 | grep -q '.solutis.net.br'
[ $? != "0" ] && echo "$RESPOSTA_HOST_ERR" && exit 2

# Confirmacao se quer continuar a execucao do script
read -p "Deseja preparar o host $1 para instalar o HP Data Protector? " RESPOSTA
[ $RESPOSTA != "y" ] && echo $RESPOSTA_NO &>> $LOG && exit 1 || echo "$RESPOSTA_OK" &>> $LOG

# Desabilitar SELinux
$SSH sed -i 's/enforcing/disabled/' /etc/selinux/config

# Cria o diretorio $AUTH_KEYS_DIR caso ele nao exista
$SSH "mkdir $AUTH_KEYS_DIR 2> /dev/null"

# Copia o $AUTH_ID para o $DNSCLIENTE
$SCP $AUTH_ID root@$DNSCLIENTE:/tmp

# Adiciona $AUTH_ID ao $AUTH_KEYS
$SSH "touch $AUTH_KEYS"
$SSH "cat /tmp/id_rsa.pub >> $AUTH_KEYS"

# Instala as depenencias do HP Data Protector
$SSH $DEPENDENCIAS

# Habilite os servicos necessarios
$SSH "chkconfig rexec on"
$SSH "chkconfig rsync on"
$SSH "chkconfig rsh on"
$SSH "service xinetd restart"

# Confirmacao da execucao
echo "$( date ) - Host $DNSCLIENTE preparado com sucesso." &>> $LOG
exit 0

Posts populares