====== 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.