Статьи

Подключение к SynapseOS по SSH

Обновлено 14.10.2026

Вход по ключу, проверка отпечатка сервера и передача файлов через SFTP.

Подключим Cloud из терминала Linux-хоста, настроим вход по ключу и передадим файл через SFTP. При запуске в QEMU гостевой порт 22 доступен на хосте как 127.0.0.1:2224.

Это первый урок серии. Во втором передадим Lua-парсер и учебный лог, в третьем добавим расписание.

Запустите гостя с портом SSH

Подготовьте рабочий QCOW2 по инструкции первого запуска. Закройте предыдущую VM, использующую этот диск. На Linux-хосте, в папке disk.qcow2, выполните:

qemu-system-x86_64 \
  -machine q35 -cpu max -m 512 -smp 2 \
  -drive file=disk.qcow2,format=qcow2,if=virtio \
  -netdev user,id=net0,hostfwd=tcp:127.0.0.1:2224-:22 \
  -device virtio-net-pci,netdev=net0 \
  -display none -serial mon:stdio

Порт открыт только на хосте. Если 2224 занят, выберите другой и замените его во всех командах урока. Для собственной команды QEMU замените строку -netdev, не добавляя второй интерфейс с тем же id.

Проверьте настройки и ключ сервера

В гостевой консоли выполните:

ip addr
cat /etc/settings.ini
dropbearkey -y -f /etc/dropbear/dropbear_ed25519_host_key

В разделе [SSH] проверьте Enabled = 1, имя из Login и Port = 22. Для входа по паролю используется значение Password вашего образа. Не копируйте в публичные материалы весь файл настроек: он может содержать пароль. Изменения, которые читает init, применяются при следующей загрузке.

На Linux-хосте:

ssh -F /dev/null -p 2224 root@127.0.0.1

При первом подключении сравните отпечаток с результатом dropbearkey в гостевой консоли. После совпадения подтвердите ключ и введите пароль. Команда -F /dev/null исключает влияние системного и пользовательского конфига SSH на этот пример.

В SSH-сеансе выполните uname -a. Для завершения сеанса используйте exit.

Добавьте свой публичный ключ

На Linux-хосте создайте отдельную пару ключей. Если файл с этим именем уже существует, используйте его или выберите другое имя; не перезаписывайте нужный ключ.

ssh-keygen -t ed25519 -f ~/.ssh/synapse_tutorial

В гостевой консоли:

mkdir -p /root/.ssh
chmod 700 /root /root/.ssh

На Linux-хосте передайте публичную часть ключа:

cat ~/.ssh/synapse_tutorial.pub | ssh -F /dev/null -p 2224 root@127.0.0.1 'cat >> /root/.ssh/authorized_keys'

Затем в госте:

chmod 600 /root/.ssh/authorized_keys

Перенаправление >> сохраняет прежние ключи. У последней существующей строки должен быть перевод строки. Приватный файл synapse_tutorial остаётся на хосте. Не переносите его в гостевую ОС.

Проверьте вход по ключу на хосте:

ssh -F /dev/null -i ~/.ssh/synapse_tutorial -o IdentitiesOnly=yes \
  -o BatchMode=yes -n -p 2224 root@127.0.0.1 'echo KEY_OK'

Результат: KEY_OK. Если ключ защищён парольной фразой, сначала загрузите его в работающий ssh-agent командой ssh-add ~/.ssh/synapse_tutorial. BatchMode=yes не запрашивает ни пароль сервера, ни парольную фразу; -n закрывает stdin для удалённой команды.

Сохраните параметры подключения

В папке на Linux-хосте создайте ssh-synapse.conf:

Host synapse-tutorial
    HostName 127.0.0.1
    Port 2224
    User root
    IdentityFile ~/.ssh/synapse_tutorial
    IdentitiesOnly yes

Теперь подключение и удалённая команда выглядят так:

ssh -F ./ssh-synapse.conf synapse-tutorial
ssh -F ./ssh-synapse.conf -n synapse-tutorial 'uname -a'
sftp -F ./ssh-synapse.conf synapse-tutorial

Файл конфигурации понадобится в следующем уроке. Для SFTP команда put имя-файла /путь/в/госте передаёт файл, get /путь/в/госте имя-файла скачивает его, bye завершает соединение.