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.862 ]
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
Instala o InterNet Explorer for Linux
Menu para liberar / bloquear laboratórios no Squid
Programas windows em gerenciadores simples
Script de monitoramento de host por icmp (ping )
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
PIP3 - erro ao instalar módulo do mariadb para o Python (9)
É normal não gostar de KDE? (8)
O programa assinador digital (0)
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)









