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.635 ]

Download cssh




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.

  



Esconder código-fonte

#!/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

Scripts recomendados

Reconhecendo controladora online

Cryporange - criptografador de mensagens

Dia Anterior

Busca e copia arquivos renomeando-os conforme a máscara

Capitu (scripts melhorados)


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts