Назад к обновлениям
New releaseAug 20, 2026

sshroute v0.2.11

Сетевой SSH-роутер — направляет соединения на разные IP-адреса/порты/ключи/шлюзы в зависимости от активной VPN-сети или сетевого подключения.

Поделиться

sshroute

CI Code OpenSpec Security
CI
Release
OpenSpec Badge
Scorecard
Latest Release
codecov
Go Report Card
Go Reference
Specs
Requirements
Tasks
Open Changes
OpenSSF Scorecard
CII Best Practices
License: Apache 2.0

Сетевой SSH-маршрутизатор. Определяет вашу активную сеть или VPN и автоматически выбирает правильный хост, порт, файл ключа и шлюз для каждого SSH-подключения — без изменений в ~/.ssh/config.

Как это работает

Определите каждый логический хост один раз с профилем default и опциональными переопределениями для каждой сети. При каждом подключении sshroute определяет, в какой сети вы находитесь (VPN, офисная LAN, WireGuard-пир и т. д.), и разрешает правильные SSH-параметры перед передачей управления настоящему /usr/bin/ssh.

ssh myserver
  → sshroute определяет: corp-vpn активен
  → разрешает: 10.100.0.50:2222 через bastion.corp.internal
  → exec /usr/bin/ssh -p 2222 -i ~/.ssh/corp_key -J bastion.corp.internal 10.100.0.50

Зачем нужен sshroute?

Для домашних лабораторий

В вашей лаборатории, скорее всего, есть как минимум две реальности: вы либо дома в локальной сети, либо в отъезде и подключаетесь через WireGuard или другой VPN. Проблема в том, что ~/.ssh/config не знает, в какой из них вы находитесь — в итоге вам приходится создавать отдельные алиасы (server-lan, server-vpn), или шлюз, который работает только половину времени, или просто запоминать IP-адреса.

sshroute решает эту проблему, определяя текущую сеть перед каждым подключением. Когда интерфейс WireGuard активен и существует маршрут к пиру, он подключается напрямую к туннельному IP. Когда вы в локальной сети — использует локальный адрес. Если ни один из адресов не доступен, он переключается на публичное имя хоста. Один алиас, три реальности, ноль ручного переключения.

Кроме того, он прозрачно перехватывает SSH — git push, rsync, scp будут работать через него автоматически после настройки теневого режима. Никаких обёрток, шелл-функций или размышлений.

Для корпоративных сред

Корпоративные сети ещё сложнее. У вас есть публичный интернет, возможно, VPN «сайт-сайт», возможно, личный VPN с разделением трафика, а внутри — разные шлюзы в зависимости от целевой среды — dev, staging, prod, у каждой свой бастион и ключ. Поддерживать всё это в ~/.ssh/config означает либо один огромный конфиг, который ломается при любом изменении инфраструктуры, либо писать скрипт, который каждый член команды поддерживает по-своему.

sshroute позволяет определить логику маршрутизации декларативно, хранить её в версионируемом YAML-файле и распространять среди команды. Одна и та же конфигурация работает для всех — правильная сеть определяется автоматически на основе активных интерфейсов или маршрутов на каждой машине. Ключи, порты, пользователи и шлюзы разрешаются без необходимости думать об этом.

Сравнение

Функция~/.ssh/configТолько WireGuardTeleport / Boundarysshroute
Определяет вашу текущую сеть❌❌❌✅
Автоматически выбирает лучший путь❌❌❌✅
Переключение при сбое подключения❌❌✅✅
Автопереподключение + смена маршрута при обрыве❌⚠️ туннель кочует⚠️ через фиксированный прокси✅
Одна команда на хост из любого места❌⚠️ VPN должен быть включён✅✅
Размер конфига для 10 хостов × 4 пути📄 ~600 строк📄 ~600 строк + конфиг VPN📄 конфиг на сервере📄 ~60 строк
Мобильные устройства в роуминге⚠️ ручные алиасы⚠️ требуется VPN✅✅
Автоматическая цепочка шлюзов⚠️ ручной -J➖ не применимо✅✅
Работает с scp / rsync / git / Ansible✅✅⚠️ частично✅
Не требует установки серверной части✅❌❌✅
Не требует сервера аутентификации или демона✅❌❌✅
Не требует клиентского агента✅❌❌✅
Open source, полностью самостоятельный✅✅⚠️ open-core✅

Teleport и Boundary — это другая категория: они добавляют контроль доступа, журналы аудита и аутентификацию на основе сертификатов поверх маршрутизации. Если вам нужно именно это — используйте их. sshroute предназначен для тех случаев, когда нужна интеллектуальная маршрутизация без операционных издержек центрального сервера аутентификации.

Установка

Загрузка бинарного файла

Загрузите последний релиз с GitHub Releases. Доступны бинарные файлы для Linux, macOS и Android на архитектурах AMD64 и ARM64.

Установка через Go

go install github.com/thereisnotime/sshroute@latest

Android (Termux)

Загрузите архив android_arm64 с GitHub Releases, распакуйте и поместите бинарный файл в ~/.local/bin:

mkdir -p ~/.local/bin
curl -Lo "$TMPDIR/sshroute.tar.gz" \
  https://github.com/thereisnotime/sshroute/releases/latest/download/sshroute_android_arm64.tar.gz
tar -xzf "$TMPDIR/sshroute.tar.gz" -C ~/.local/bin sshroute
chmod +x ~/.local/bin/sshroute

Категории