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.931 ]
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
sbinstall.sh - Descompacta, compila e instala SlackBuild
shieldscript - Script para defesa básica do seu GNU/Linux
Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
Backup de algumas databases, Remotamente.
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como impedir exclusão de arquivos por outros usuários no (Linux)
Cirurgia no Linux Mint em HD Externo via USB
Anúncio do meu script de Pós-Instalação do Ubuntu
Formas seguras de instalar Debian Sid (2)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (12)
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (5)
Alguém executou um rm e quase mata a Pixar! (3)
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (6)









