04-11-2026 · projects/better-ssh.md

better-ssh: потому что я устал вспоминать IP-адреса

Когда серверов три — всё просто. Знаешь их наизусть, подключаешься не задумываясь.

Когда серверов больше десяти — начинается другое. Разные проекты, разные клиенты, разные окружения. Dev, staging, prod. VPS для экспериментов, рабочие машины, домашний сервер. Каждый со своим IP, своим пользователем, иногда нестандартным портом.

~/.ssh/config помогает. Но всё равно нужно помнить имя хоста, правильно набрать команду. И пароли — отдельная история: хранить в plaintext неприятно, каждый раз вводить вручную — тоже.

Я написал better-ssh — CLI с интерактивным меню.

Запускаешь, видишь список серверов. Последние использованные — вверху. Можно набрать часть имени и найти нужный. Можно прибить любимые серверы в начало списка — они всегда там. Выбрал — подключился.

$ better-ssh

 prod-api          192.168.1.10   ubuntu
 home-server       10.0.0.5       alex
  ──────────────────────────────────────────
    staging-db        10.0.0.22      postgres
    dev-vm            192.168.1.50   dev
    client-vps        45.67.89.10    root

  > _

Главная механика — в связке сервер + пароль. К каждому серверу можно привязать пароль: он хранится зашифрованным через Fernet, ключ производится от твоего SSH-ключа. Никакого отдельного мастер-пароля. При подключении пароль автоматически оказывается в буфере обмена — ты просто вставляешь его, когда SSH спрашивает.

Это принципиальный момент. SSH pass-фразы и хранение паролей в агентах — история с компромиссами: где-то небезопасно, где-то неудобно, где-то вообще не работает на Windows. Буфер обмена — другое. Он локальный, работает везде, с ним умеет любое приложение. Выбрал сервер — пароль уже в буфере, подключился, вставил.

Если уже есть ~/.ssh/config — можно импортировать оттуда одной командой, не вводить всё заново.

better-ssh import-ssh-config

Работает на Windows, macOS, Linux. Под капотом — Python 3.12, uv для управления зависимостями.

Инструмент вырос из усталости. Не от SSH как такового — от того, что каждый раз приходилось думать о деталях вместо того, чтобы просто подключиться. Теперь не думаю.