Goto: Минималистичный SSH менеджер для тех, кто живет в терминале

Если вы управляете десятками серверов и устали от бесконечных ssh user@192.168.1.123 -p 2222 -i ~/.ssh/some_key, эта статья для вас. Сегодня разберем Goto - простой, но элегантный SSH менеджер для терминала, который сделает вашу жизнь чуточку проще.

Проблема, которую решает Goto

Представьте типичный день DevOps инженера:

# Утро понедельника
ssh root@10.0.1.5 -p 2222
# Хм, не тот сервер

ssh admin@10.0.1.15 -p 2222
# Опять не тот

ssh devops@prod-k8s-master.internal -i ~/.ssh/prod_key
# Наконец-то!

Знакомо? У меня в ~/.bash_history сотни таких команд. Да, можно использовать алиасы:

alias prod='ssh devops@prod-k8s-master.internal -i ~/.ssh/prod_key'
alias staging='ssh ubuntu@staging.company.com -p 2222'

Но когда серверов становится больше 20, алиасы превращаются в кашу. А еще их нужно синхронизировать между машинами, помнить названия, и вообще это не очень удобно.

Что такое Goto

Goto - это TUI (Terminal User Interface) приложение для управления SSH подключениями. Ключевая особенность - он не пытается заменить SSH клиент (как PuTTY), а просто организует ваши подключения в удобном виде.

Основные возможности

  • Визуальный список всех серверов в терминале
  • Навигация стрелками, подключение по Enter
  • Два режима хранения: собственный YAML или импорт из ~/.ssh/config
  • Поддержка всех стандартных SSH опций
  • Кроссплатформенность: Linux, macOS, Windows
  • Один бинарник без зависимостей

Установка

macOS (Homebrew)

brew tap avasilic/goto
brew install goto-ssh

Linux

Скачиваем последнюю версию с GitHub:

# Для AMD64
wget https://github.com/grafviktor/goto/releases/latest/download/gg-linux-amd64 -O gg
chmod +x gg
sudo mv gg /usr/local/bin/

# Для ARM64
wget https://github.com/grafviktor/goto/releases/latest/download/gg-linux-arm64 -O gg
chmod +x gg
sudo mv gg /usr/local/bin/

Arch Linux (AUR)

yay -S goto-ssh-bin

Windows

Скачайте gg-windows-amd64.exe из releases и добавьте в PATH.

Первый запуск

После установки просто выполните:

gg

При первом запуске Goto создаст папку конфигурации:

  • Linux: ~/.config/goto/
  • macOS: ~/Library/Application Support/goto/
  • Windows: %AppData%\goto\

Настройка хостов

Способ 1: YAML конфигурация

Goto хранит список серверов в файле hosts.yaml. Структура простая и понятная:

- host:
    title: prod-k8s-master
    description: Production Kubernetes Master Node
    address: 10.0.1.5
    username: devops
    identity_file_path: ~/.ssh/prod_key
    
- host:
    title: staging-db
    description: Staging PostgreSQL Server
    address: staging.company.com
    network_port: 2222
    username: postgres
    
- host:
    title: monitoring
    description: Prometheus + Grafana
    address: monitor.internal
    username: admin
    identity_file_path: ~/.ssh/monitoring_rsa
    forward_agent: true

Поддерживаемые параметры:

  • title - короткое имя для быстрой идентификации
  • description - подробное описание
  • address - IP или hostname
  • network_port - SSH порт (по умолчанию 22)
  • username - имя пользователя
  • identity_file_path - путь к приватному ключу
  • forward_agent - проброс SSH агента

Способ 2: Импорт из SSH config

Если у вас уже настроен ~/.ssh/config, можно использовать его:

# Включить чтение из ssh_config
gg -e ssh_config

# Или через переменную окружения
export GG_SSH_CONFIG_FILE_PATH=~/.ssh/config
gg

Пример ~/.ssh/config:

Host prod-k8s
    HostName 10.0.1.5
    User devops
    Port 22
    IdentityFile ~/.ssh/prod_key

Host staging-*
    User ubuntu
    Port 2222
    StrictHostKeyChecking no

Использование

Базовая навигация

  • ↑/↓ или j/k - перемещение по списку
  • Enter - подключиться к серверу
  • a - добавить новый сервер
  • e - редактировать выбранный сервер
  • d - удалить сервер
  • q или Ctrl+C - выход

Полезные флаги

# Указать альтернативную папку конфигурации
gg -f /mnt/shared/goto-config

# Debug режим для траблшутинга
gg -l debug

# Показать версию и конфигурацию
gg -v

Переменные окружения

# Папка конфигурации
export GG_HOME=/custom/path/goto

# Уровень логирования
export GG_LOG_LEVEL=debug

# Путь к SSH config
export GG_SSH_CONFIG_FILE_PATH=/custom/ssh/config

Практические примеры

Организация серверов по проектам

# Project A - Production
- host:
    title: [PROD] app-server-1
    description: Project A - Main Application Server
    address: prod1.projecta.com
    username: deploy
    
- host:
    title: [PROD] app-server-2
    description: Project A - Secondary Application Server
    address: prod2.projecta.com
    username: deploy

# Project A - Staging
- host:
    title: [STAGE] app-server
    description: Project A - Staging Environment
    address: stage.projecta.com
    username: ubuntu
    
# Infrastructure
- host:
    title: [INFRA] monitoring
    description: Prometheus + Grafana + AlertManager
    address: 10.0.10.50
    username: admin

Интеграция с tmux

Создайте скрипт для быстрого подключения в новом окне tmux:

#!/bin/bash
# ~/.local/bin/tgg

tmux new-window -n "SSH" "gg"

Backup конфигурации

# Backup
tar -czf goto-backup-$(date +%Y%m%d).tar.gz ~/.config/goto/

# Restore
tar -xzf goto-backup-20240124.tar.gz -C ~/

Сравнение с альтернативами

storm

# storm
storm add prod devops@10.0.1.5:22 --id_file ~/.ssh/prod_key
storm list
storm prod

# goto
# Визуальный интерфейс вместо CLI команд
gg

Преимущества Goto:

  • Визуальный интерфейс удобнее для большого количества серверов
  • Нет необходимости помнить команды
  • Более интуитивная навигация

sshs

sshs имеет больше функций:

  • Поиск по хостам
  • Группировка серверов
  • Batch операции

Но Goto выигрывает в простоте и минимализме.

Обычные алиасы

Алиасы хороши для 5-10 серверов. Но у них есть недостатки:

  • Нужно помнить все названия
  • Сложно синхронизировать между машинами
  • Нет визуального представления
  • Неудобно редактировать

Недостатки и ограничения

Честно о минусах:

  1. Нет поиска - при 50+ серверах навигация становится неудобной
  2. Нет групп/тегов - все хосты в одном списке
  3. Базовые SSH опции в YAML - сложные конфигурации только через ssh_config
  4. Нет batch операций - нельзя выполнить команду на нескольких серверах
  5. Нет синхронизации - конфиг локальный для каждой машины

Кому подойдет Goto

✅ Подойдет если вы:

  • Управляете 10-50 серверами
  • Любите минималистичные TUI инструменты
  • Хотите быстрое решение без сложной настройки
  • Предпочитаете визуальную навигацию

❌ Не подойдет если нужно:

  • Управлять сотнями серверов
  • Сложная группировка и теги
  • Batch операции
  • Централизованное управление конфигами

Итоги

Goto - отличный пример философии Unix: делать одну вещь, но делать её хорошо. Это не швейцарский нож с миллионом функций, а простой и надежный инструмент для конкретной задачи.

Если вы устали от запоминания IP адресов и портов, но не хотите разворачивать сложные системы управления - попробуйте Goto. Установка занимает 30 секунд, а польза ощущается сразу.

Полезные ссылки

P.S.

Не забудьте поставить звездочку проекту на GitHub, если он вам понравился. Open source проекты живут благодаря поддержке сообщества!