SSH — sing-box
sing-box поставляет исходящий SSH-клиент. Стандартные возможности SSH — аутентификация по паролю, аутентификация по ключу с парольной фразой, пиннинг ключа хоста, переопределение баннера — доступны все.
Исходящий
type: "ssh":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
user | string | (server-dependent) | <username> | Имя пользователя для входа по SSH. |
password | string | (unset) | <string> | Аутентификация по паролю. Используется вместе с аутентификацией по ключу — если заданы обе, sing-box сначала пробует пароль. |
private_key | badoption.Listable[string] | [] | <PEM block> | Встроенный приватный ключ (или ключи). Принимает одну PEM-строку или список PEM-строк. |
private_key_path | string | (unset) | <file path> | Путь к файлу приватного ключа. Переопределяет `private_key`, если заданы оба. |
private_key_passphrase | string | (unset) | <string> | Парольная фраза для расшифровки зашифрованных приватных ключей. |
host_key | badoption.Listable[string] | [] | <key string> | Ожидаемые ключи хоста (формат authorized_keys). Пустое значение отключает проверку — полезно только для тестирования. |
host_key_algorithms | badoption.Listable[string] | (library default) | <algo> | Ограничивает алгоритмы ключей хоста, принимаемые клиентом. Полезно для старых серверов. |
client_version | string | (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_hostsOpenSSH. Пустой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)
