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 }