====== SSH Menu para Gerenciamento de Conexões ======
Este script ''ssh_menu'' permite adicionar, remover, listar e conectar-se a hosts SSH usando uma interface interativa com o **fzf**. Ideal para administradores de sistemas que gerenciam múltiplas conexões SSH e querem simplificar o processo.
===== Pré-requisitos =====
Para usar este script, você precisa do utilitário ''fzf'':
* Instale ''fzf'' em distribuições Debian/Ubuntu:
sudo apt install fzf
* Em distribuições Red Hat/CentOS:
sudo yum install fzf
===== Configuração do Script =====
1. **Passo 1:** Crie o arquivo para funções personalizadas em seu diretório pessoal:
touch ~/.bash_functions
2. **Passo 2:** Abra o arquivo para edição:
vim ~/.bash_functions
3. **Passo 3:** Cole o conteúdo do script abaixo no arquivo **~/.bash_functions**.
ssh_menu() {
local hosts_file="$HOME/.ssh/hosts_list"
local ssh_config="$HOME/.ssh/config"
# Garante que os arquivos existam
touch "$hosts_file" "$ssh_config"
# Função para adicionar um novo host
add_ssh() {
echo -n "Digite o alias do host (ex: vm-01): "
read alias
echo -n "Digite o IP do host (ex: 192.168.200.100): "
read ip
echo -n "Digite a porta SSH (default: 22): "
read port
port=${port:-22} # Porta padrão é 22
echo -n "Digite o usuário (default: gean): "
read user
user=${user:-"gean"}
echo -n "Digite o caminho da chave SSH (default: ~/.ssh/vms): "
read key
key=${key:-"$HOME/.ssh/vms"}
# Valida IP e porta
if [[ ! $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "IP inválido."
return
elif [[ ! $port =~ ^[0-9]+$ ]] || (( port < 1 || port > 65535 )); then
echo "Porta inválida."
return
fi
# Verifica duplicidade no SSH config e hosts_list
if grep -q "Host $alias" "$ssh_config" || grep -q "^$alias:" "$hosts_file"; then
echo "Alias $alias já existe."
return
fi
# Adiciona ao config e hosts_list
{
echo -e "\nHost $alias"
echo " HostName $ip"
echo " Port $port"
echo " User $user"
echo " IdentityFile $key"
} >> "$ssh_config"
echo "$alias:$ip" >> "$hosts_file"
echo "Host $alias adicionado."
}
# Função para remover um host
remove_ssh() {
echo -n "Digite o alias do host para remover: "
read alias
sed -i "/^$alias:/d" "$hosts_file"
sed -i "/^Host $alias$/,/^$/d" "$ssh_config"
echo "Host $alias removido."
}
# Função para listar hosts
list_hosts() {
echo "Hosts disponíveis:"
cat "$hosts_file"
}
# Verifica se fzf está instalado
if ! command -v fzf &> /dev/null; then
echo "fzf não está instalado."
return 1
fi
# Menu interativo com fzf
local choice=$( (echo "Adicionar novo host"; echo "Remover host"; echo "Listar hosts"; cat "$hosts_file") | fzf --prompt="Selecione a ação: " )
case "$choice" in
"Adicionar novo host")
add_ssh
;;
"Remover host")
remove_ssh
;;
"Listar hosts")
list_hosts
;;
*)
local alias=$(echo "$choice" | cut -d':' -f1)
if [[ -n "$alias" ]]; then
echo "Conectando ao host $alias..."
ssh -q "$alias" || echo "Erro ao conectar."
else
echo "Nenhuma opção válida selecionada."
fi
;;
esac
}
4. **Passo 4:** Edite seu arquivo ''~/.bashrc'' para carregar o script automaticamente ao iniciar o terminal:
Abra o ''~/.bashrc'' e adicione a linha abaixo ao final do arquivo:
if [ -f ~/.bash_functions ]; then
source ~/.bash_functions
fi
5. **Passo 5:** Carregue o ''~/.bashrc'' ou abra um novo terminal para aplicar as configurações:
source ~/.bashrc
===== Uso do Script =====
Após configurar o script, você pode usá-lo executando o comando ''ssh_menu'' no terminal. As opções disponíveis são:
- **Adicionar novo host**: Configura um novo host SSH com alias, IP, porta, usuário e chave SSH.
- **Remover host**: Remove todas as informações de um host existente.
- **Listar hosts**: Exibe todos os hosts configurados.
- **Selecionar um host**: Mostra uma lista para se conectar rapidamente usando o alias definido.
===== Contribuição e Feedback =====
Sinta-se à vontade para compartilhar melhorias ou reportar problemas encontrados no script. A contribuição da comunidade é essencial para aprimorar ferramentas como esta e facilitar a administração de sistemas para todos.
===== Observações Importantes =====
* Certifique-se de que o ''fzf'' esteja instalado para que o menu interativo funcione corretamente.
* Para segurança, verifique as permissões do diretório ''~/.ssh/'' e dos arquivos ''hosts_list'' e ''config'' para evitar que sejam acessados por usuários não autorizados.