Проверка подлинности SSH-сервера
Sambryx проверяет ключ сервера до передачи SSH-реквизитов. Доверие задаётся администратором
в OpenSSH-файле known_hosts. Неизвестный, изменившийся или отозванный ключ блокирует вход.
Автоматического принятия ключей и кнопки обхода проверки нет.
Это изменение требует настройки при обновлении прежних установок: без доверенных ключей SSH-подключение не будет разрешено. Существующие пользователи и общие папки не меняются.
Не путайте ключ сервера с ключом пользователя: SSH_AUTHORIZED_KEYS_FILE разрешает вход
клиенту, а SSH_KNOWN_HOSTS_FILE подтверждает подлинность сервера. Они не взаимозаменяемы.
Получение доверенного ключа
Через консоль сервера, консоль гипервизора или другой уже доверенный административный канал:
sudo cat /etc/ssh/ssh_host_ed25519_key.pub
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub -E sha256
Сверьте отпечаток с владельцем сервера. В локальный файл добавьте строку:
Вместо files.example.org укажите точный host/IP, который вводится в форме. Для SSH-порта,
отличного от 22, запись должна включать порт:
Доверие для другого порта не переносится автоматически. Поддерживаются несколько ключей на
адрес, имена через запятую и хешированные записи OpenSSH |1|.... Шаблоны имён и SSH
host certificates / @cert-authority не поддерживаются; используйте конкретные имена.
@revoked запрещает соответствующий ключ, даже если он также присутствует обычной записью.
ssh-keyscan сам по себе не доказывает подлинность сервера. Нельзя без независимой сверки
отпечатка записывать его вывод в доверенные ключи: так можно закрепить ключ подменённого сервера.
Подключение файла
Файл содержит публичные ключи и должен читаться UID 10001 контейнера, но не изменяться
приложением. Храните его вне Git, например в .local/ssh/known_hosts:
mkdir -p .local/ssh
# Create the file only if it does not exist; never truncate existing trust.
touch .local/ssh/known_hosts
# Add independently verified public host keys before login.
chmod 0644 .local/ssh/known_hosts
Для docker run добавьте:
Для production Compose задайте в .env:
При непосредственном запуске JVM путь меняется через SAMBA_SSH_KNOWN_HOSTS или
samba.ssh.known-hosts. По умолчанию используется /etc/sambryx/known_hosts.
Недоступный файл приводит к безопасному отказу входа, но не выключает HTTP-приложение.
Первый запуск встроенного production-узла
Подготовьте TLS-файлы, .env и ключ управления по разделу
полного стека. Публичный management.pub уже должен
существовать: он нужен даже для запуска только узла.
Для новой установки со стандартным SSH_KNOWN_HOSTS_FILE создайте файл доверия.
touch сохраняет существующие записи; не очищайте файл при повторном запуске.
Если в .env выбран другой путь, используйте его вместо указанного:
mkdir -p deploy/production/secrets
touch deploy/production/secrets/known_hosts
chmod 0644 deploy/production/secrets/known_hosts
Пустой файл запрещает вход до добавления проверенного ключа. Запустите только Samba-узел:
docker compose --env-file deploy/production/.env \
-f docker-compose.production.yml -f docker-compose.samba.yml \
up -d --build --wait samba-node
Администратор, контролирующий Docker Engine, может получить ключ непосредственно из этого контейнера. Это доверенный административный канал, а не сетевое обнаружение:
docker compose --env-file deploy/production/.env \
-f docker-compose.production.yml -f docker-compose.samba.yml \
exec -T samba-node cat /etc/ssh/ssh_host_ed25519_key.pub
docker compose --env-file deploy/production/.env \
-f docker-compose.production.yml -f docker-compose.samba.yml \
exec -T samba-node ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub -E sha256
Сверьте SHA-256 отпечаток ключа, который собираетесь добавить, с результатом доверенной
консоли узла. После подтверждения поместите публичный ключ в known_hosts одной строкой:
Завершающий комментарий публичного ключа необязателен. Сохраните права 0644 и запустите
полный стек через bash scripts/production/run.sh --with-samba.
Не записывайте в этот файл приватный ключ management: он нужен только для формы входа.
Скрипт локального disposable sandbox сам получает публичные ключи собственного контейнера
через Docker Engine в отдельный .local/sandbox/known_hosts, не затрагивая рабочие доверенные ключи; такое действие не применяется к произвольным удалённым серверам.
Если ключ ещё не добавлен
Сообщение о неизвестном ключе означает, что доверие для этого host/port не настроено. Показанный страницей отпечаток является полученным по сети, а не подтверждённым. Проверьте адрес и порт в форме, получите ключ и отпечаток через доверенный канал, сверьте их и добавьте запись с точным именем. Затем пересоздайте панель по production-инструкции и повторите вход. Не копируйте отпечаток из ошибки в качестве основания доверия.
Если ключ изменился
Страница входа сообщает о возможной подмене и показывает полученный SHA-256 отпечаток. Он служит диагностикой, а не подтверждением доверия. Реквизиты и команды к серверу не отправляются.
- Остановите попытки входа и выясните причину: переустановка, плановая ротация или неверный адрес.
- Сверьте новый отпечаток через независимый доверенный канал.
- Только после подтверждения замените нужную запись в
known_hosts. - Пересоздайте контейнер панели с тем же read-only подключением файла и войдите заново.
Пересоздание панели также завершает старые HTTP/SSH-сессии. При файловом bind mount атомарная замена файла на хосте может оставить старый inode в контейнере, поэтому одного редактирования файла недостаточно для гарантированного обновления доверия.
API возвращает HTTP 409 и код SSH_HOST_KEY_UNKNOWN / SSH_HOST_KEY_CHANGED; недоступный
файл — HTTP 503 и SSH_HOST_KEY_UNAVAILABLE. Подробности исключений, приватные ключи,
пароли и путь доверенного файла в ответ не включаются.