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.908 ]
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
Script Backup ultimo arquivo criado em um diretorio feito TAR direto para DAT
Pegar ip dinamico enviar para ftp
Script para executar o giFT daemon e uma interface de usuário
Nenhum comentário foi encontrado.
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
Instalando partes faltantes do Plasma 6
Adicionar botão "mostrar área de trabalho" no Zorin OS
Como montar um servidor de backup no linux
Estou tentando ser legalista, mas tá complicado! (9)
espelhar monitores nao funciona (2)
SQLITE não quer funcionar no LINUX LMDE6 64 com Lazaruz 4.2 64bit (n... (1)









