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.
Para usar este script, você precisa do utilitário fzf:
fzf em distribuições Debian/Ubuntu:sudo apt install fzf
sudo yum install fzf
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
Após configurar o script, você pode usá-lo executando o comando ssh_menu no terminal. As opções disponíveis são:
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.
fzf esteja instalado para que o menu interativo funcione corretamente.~/.ssh/ e dos arquivos hosts_list e config para evitar que sejam acessados por usuários não autorizados.