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 или конкретную сборку.
cipherbadoption.Listable[string](library default)<algo>Разрешённые шифры в порядке предпочтения (например, aes128-ctr, chacha20-poly1305@openssh.com). Пусто — значения по умолчанию библиотеки SSH. Полезно для старых серверов.
macbadoption.Listable[string](library default)<algo>Разрешённые MAC-алгоритмы (например, hmac-sha2-256-etm@openssh.com). Пусто — значения по умолчанию библиотеки SSH.
kex_algorithmbadoption.Listable[string](library default)<algo>Разрешённые алгоритмы обмена ключами (например, curve25519-sha256). Пусто — значения по умолчанию библиотеки SSH.

Исходный код: option/ssh.go:5-19 · зафиксировано на v1.14.2 (af6e64c)

Встраивает 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 не реализован. (ssh_server конечной точки Tailscale обслуживает SSH только внутри tailnet.)
  • 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-19 · v1.14.2 (af6e64c)

Core Tutorial от Argsment