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 ]
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
Reconhecendo controladora online
Cryporange - criptografador de mensagens
Busca e copia arquivos renomeando-os conforme a máscara
Nenhum comentário foi encontrado.
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
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
É cada coisa que me aparece! - não é só 3% (1)
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
Mikrotik não mostra bytes nem packtes (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta