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 или hostnamenetwork_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 серверов. Но у них есть недостатки:
- Нужно помнить все названия
- Сложно синхронизировать между машинами
- Нет визуального представления
- Неудобно редактировать
Недостатки и ограничения
Честно о минусах:
- Нет поиска - при 50+ серверах навигация становится неудобной
- Нет групп/тегов - все хосты в одном списке
- Базовые SSH опции в YAML - сложные конфигурации только через ssh_config
- Нет batch операций - нельзя выполнить команду на нескольких серверах
- Нет синхронизации - конфиг локальный для каждой машины
Кому подойдет Goto
✅ Подойдет если вы:
- Управляете 10-50 серверами
- Любите минималистичные TUI инструменты
- Хотите быстрое решение без сложной настройки
- Предпочитаете визуальную навигацию
❌ Не подойдет если нужно:
- Управлять сотнями серверов
- Сложная группировка и теги
- Batch операции
- Централизованное управление конфигами
Итоги
Goto - отличный пример философии Unix: делать одну вещь, но делать её хорошо. Это не швейцарский нож с миллионом функций, а простой и надежный инструмент для конкретной задачи.
Если вы устали от запоминания IP адресов и портов, но не хотите разворачивать сложные системы управления - попробуйте Goto. Установка занимает 30 секунд, а польза ощущается сразу.
Полезные ссылки
P.S.
Не забудьте поставить звездочку проекту на GitHub, если он вам понравился. Open source проекты живут благодаря поддержке сообщества!