CSSH - Programa para agilizar o acesso aos servidores que você gerencia
Publicado por Antonio Modesto Amaral Sousa (última atualização em 12/12/2010)
[ Hits: 7.636 ]
Esse programa obtém os hosts configurados pelo usuário através de um arquivo de configuração, enumera-os e os exibe na tela como opção para acessar via ssh.
#!/bin/sh # # cssh: Software para agilizar o acesso a hosts via SSH, buscando hosts pre-definidos num arquivo de configuracao # e mostrando como opcoes na tela. # # # Versao 0.1b # -> A funcao workdir() não remove mais a database toda vez que o programa é executado. # -> Possui agora uma função refresh atualizar a lista de hosts. ( O parser não e mais chamado toda vez ) # -> Possui tambem uma função help. # # Versao 0.1c # -> A funcao connect() esta independente da funcao showHosts(). # -> Possui agora suporte a busca atraves do parametro -s <expressao> # # Versao 0.1d # -> A funcao workdir agora cria um arquivo de configuração generico caso nao exista nenhum # -> A versao agora e buscada nos cabecalhos atraves da funcao version() # # # Escrito por: Antonio Modesto Amaral Sousa <modesto@isimples.com.br> # # # TODO: Validar os campos IP/HOSTNAME, caso esteja fora do padrão ignorar a linha. # # #------------------------------------------------------------------------------------------------------------------------------ # # Definicao de variaveis e funcoes # #### Variaveis # Diretorio para o arquivo de configuracao CONFIG="${HOME}/.cssh/cssh.conf" # "Database" para salvar os hosts CSSHDB="${HOME}/.cssh/cssh.db" #### Funcoes # Atualiza Versao Buscando no cabecalho version() { VERSION=$(egrep "^# Versao .*\..*" $0 | tail -1 |awk '{ print $3 }') echo $VERSION } # Prepara o ambiente workDir() { local WORKDIR="${HOME}/.cssh" local CONFIG="${WORKDIR}/cssh.conf" [ ! -d ${WORKDIR} ] && mkdir ${WORKDIR} if [ ! -f $CONFIG ] then touch $CONFIG echo -e "# <alias>\t[<porta>]\t<ip>" >> $CONFIG echo -e "# FOO\t5522\t192.168.1.100" >> $CONFIG fi } # Testa se existem o minimo de configuracoes necessarias para a execucao workDirTest() { if [ ! -f $CSSHDB ] then echo -e "Erro: $CSSHDB esta vazio.\n(Ja editou seu arquivo de configuracao?)." exit 1 fi } # Parser do arquivo de configuracao parser() { local COUNTER=1 # Inicia contador while read LINE # Loop do parser do [ $(echo $LINE |cut -c1) = "#" ] && continue # Ignorando linhas comecando com "#" [ "$LINE" ] || continue # Ignorando linhas em branco LINE=$(echo "$LINE" |tr "a-z" "A-Z") # Transformando minusculas em maiusculas set - $LINE alias=$(echo $1 |cut -c1-7) # Define hostname como primeiro parametro, com maximo de 7 caracteres [ $3 ] || port=22 && address=$2 [ $3 ] && address=$3 && port=$2 # Se existe o terceiro argumento, port = segundo, address = terceiro # Insere as informacoes no banco de dados echo "$COUNTER $alias $port $address" >> $CSSHDB COUNTER=$(($COUNTER + 1)) done < $CONFIG # Fim do loop (recebe dados de $CONFIG) } # Funcao que le as informacoes no arquivo .db, formata e mostra na tela showHosts() { echo "CSSH - Cliente SSH" echo "Versao: $(version)" echo "Hosts Configurados: " while read HOST do set - $HOST local NUMBER=$1 local ALIAS=$2 local PORT=$3 local ADDRESS=$4 echo -e "\t$NUMBER) \tAlias: $ALIAS \t\tIP/HOSTNAME: $ADDRESS \tPorta: $PORT" done < $CSSHDB } # Funcao que utiliza a funcao showHosts para mostrar os hosts configurados, recebe # o numero do host como argumento para iniciar a conexao SSH connect() { echo -n "Selecione um host: " read OPTION OPTION=$(echo $OPTION |tr -d -c "0-9") # Remove caracteres inseridos acidentalmente if [ $OPTION -gt $(tail -1 $CSSHDB |cut -d" " -f1) ] # Verifica opcoes invalidas then echo "Esse host nao esta configurado." exit 1 fi HOSTINFO=$(egrep "^${OPTION} " $CSSHDB) # Pega informacoes do host selecionado # Transforma dados em parametros posicionais set - $HOSTINFO local PORT=$3 # Porta local ADDRESS=$4 # IP echo -n "Login: " read LOGIN ssh -l $LOGIN -p $PORT $ADDRESS # Realiza a conexao } # Funcao que mostra as opcoes disponiveis do software help() { echo "Usage: $(basename $0) [OPTIONS]" echo -e "OPTIONS:" echo -e "\t\t -h, --help Exibe essa mensagem e sai." echo -e "\t\t -r, --refresh Atualiza a lista de endereços." echo -e "\t\t -s, --search S Busca nos Hosts cadastrados pela expressao S." } # Funcao chamada pelos parametros -r ou --refresh, ela atualiza o banco de dados do programa de acordo com as alteracoes feitas # no arquivo de configuracao refresh() { [ -f $CSSHDB ] && rm -f $CSSHDB parser echo "Lista Atualizada com sucesso." } # Funcao que recebe um parametro e faz uma busca nos hosts cadastrados. search() { EXPRESSION=$1 # Argumento passado para a funcao [ $EXPRESSION ] || exit 1 # Verifica se existe um valor no argumento, se não sai showHosts |grep -i $EXPRESSION # Realiza a busca } if [ $# = 0 ] # Se nao for passado nenhum parametro... then # entao workDir # Prepara o ambiente caso necessario workDirTest # Verifica se esta tudo ok para a execucao showHosts # Mostra os hosts configurados connect # Conecta no hosts selecionado else # caso contrario case $1 in # Executa a acao relacionada ao parametro -h | --help) # Ajuda help ;; -r | --refresh) # Atualiza DB refresh ;; -s | --search) # Busca shift SEARCHFOR=$1 if [ ! $SEARCHFOR ] then help fi RESULT=$(search $SEARCHFOR |wc -l) # Numero de resultados [ $RESULT -le 0 ] && exit 1 search $SEARCHFOR connect ;; *) # Se a opcao nao existir... help # help! ;; esac fi
Monitorar pppe-server, radius e proxy (estilo fastfood)
Script que automatiza o treinamento do SpamAssassin
Mostrando informações sobre conexões ppp dos clientes
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
Melhorando a precisão de valores flutuantes em python[AJUDA] (11)
GLPI - Configuração de destinatário com conta Microsoft Exchange (0)
Vou voltar moderar conteúdos de Dicas e Artigos (3)
OpenVPN no MACBOOK conecta mas não pinga pastas de rede compartilhada ... (1)