Table of Contents

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:

sudo apt install fzf
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
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:

  1. Adicionar novo host: Configura um novo host SSH com alias, IP, porta, usuário e chave SSH.
  2. Remover host: Remove todas as informações de um host existente.
  3. Listar hosts: Exibe todos os hosts configurados.
  4. 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