Skip to content

SSH — sing-box

sing-box поставляет исходящий SSH-клиент. Стандартные возможности SSH — аутентификация по паролю, аутентификация по ключу с парольной фразой, пиннинг ключа хоста, переопределение баннера — доступны все.

Исходящий

type: "ssh":

ПолеТипПо умолчаниюДопустимые значенияОписание
userstring(server-dependent)<username>Имя пользователя для входа по SSH.
passwordstring(unset)<string>Аутентификация по паролю. Используется вместе с аутентификацией по ключу — если заданы обе, sing-box сначала пробует пароль.
private_keybadoption.Listable[string][]<PEM block>Встроенный приватный ключ (или ключи). Принимает одну PEM-строку или список PEM-строк.
private_key_pathstring(unset)<file path>Путь к файлу приватного ключа. Переопределяет `private_key`, если заданы оба.
private_key_passphrasestring(unset)<string>Парольная фраза для расшифровки зашифрованных приватных ключей.
host_keybadoption.Listable[string][]<key string>Ожидаемые ключи хоста (формат authorized_keys). Пустое значение отключает проверку — полезно только для тестирования.
host_key_algorithmsbadoption.Listable[string](library default)<algo>Ограничивает алгоритмы ключей хоста, принимаемые клиентом. Полезно для старых серверов.
client_versionstring(library default)<SSH version string>Баннер версии клиента. Переопределите, чтобы имитировать OpenSSH или конкретную сборку.

Исходный код: option/ssh.go:5-16 · зафиксировано на v1.13.15 (3708fa1)

Встраивает DialerOptions и ServerOptions (server, server_port).

Примеры

Аутентификация по ключу, закреплённый ключ хоста:

json
{
  "outbounds": [
    {
      "type": "ssh",
      "tag": "ssh-out",
      "server": "ssh.example.com",
      "server_port": 22,
      "user": "alice",
      "private_key_path": "/etc/sing-box/id_ed25519",
      "private_key_passphrase": "<passphrase>",
      "host_key": ["ssh.example.com ssh-ed25519 AAAA..."]
    }
  ]
}

Аутентификация по паролю с подменой баннера:

json
{
  "outbounds": [
    {
      "type": "ssh",
      "tag": "ssh-spoof",
      "server": "ssh.example.com",
      "server_port": 22,
      "user": "alice",
      "password": "<password>",
      "client_version": "SSH-2.0-OpenSSH_9.6"
    }
  ]
}

Примечания

  • Исходящий SSH — только клиент: входящий SSH-сервер в sing-box не реализован.
  • host_key использует формат в стиле known_hosts OpenSSH. Пустой host_key означает «доверять любому ключу хоста» — небезопасно для продакшена.
  • private_key принимает список, потому что хост может ротировать ключи; sing-box перебирает их по порядку, пока один не будет принят.

Сравнение с другими ядрами

  • Xray-core не реализует SSH. См. SSH — Xray-core.
  • mihomo использует username (а не user), kebab-case для остальных полей (private-key-passphrase, host-key-algorithms) и принимает приватный ключ одной строкой, а не списком. См. SSH — mihomo.

Исходный код: option/ssh.go:5-16 · v1.13.15 (3708fa1)

Core Tutorial от Argsment