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

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

burncd.sh

0-ImgMenus

Script para módulo de bateria do GKrellm

Ativando NumLock

Barra de progresso em Dialog


  

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