Как я могу получить доступ к контейнеру Incus через SSH из VSCode?

Вопрос или проблема

Контекст

У меня есть хост, работающий на Fedora 38 (да, я знаю, скоро обновлю).

У меня есть несколько контейнеров LXC, к которым я могу получить доступ с помощью VSCode (на самом деле VSCodium, если это имеет значение). Я использую расширение “Open Remote – SSH” для этого.

При настройке нового LXC я выполняю команду:

lxc file push ~/.ssh/id_rsa.pub [container_id]/root/.ssh/authorized_keys

Затем я редактирую ~/.ssh/config, чтобы добавить:

Host [container_id]
    HostName [container_ip]
    User root
    IdentityFile ~/.ssh/id_rsa
    PubKeyAuthentication yes

После этого я могу получить доступ к контейнеру с хоста через VSCode.

Моя проблема

Недавно я настроил Incus, чтобы постепенно заменить свои старые контейнеры LXC этим проектом-вилкой. К сожалению, когда я следую той же процедуре, это не работает!

Ошибка, которую я получаю при подключении:

[Info  - 09:01:43.509] Разрешение ssh удаленного авторитета 'ssh-remote+dummy-incus' (попытка #1)
[Trace  - 09:01:43.531] Идентификационные ключи:
/home/myusername/.ssh/id_rsa ssh-rsa SHA256:XXXXXXXXX
[Info  - 09:01:43.584] Пытаюсь аутентификацию без пароля
[Info  - 09:01:43.628] Пытаюсь аутентификацию по публичному ключу: /home/myusername/.ssh/id_rsa ssh-rsa SHA256:XXXXXXXXX
[Info  - 09:01:43.679] Пытаюсь аутентификацию по паролю
[Error  - 09:01:49.99] Ошибка разрешения авторитета
Ошибка: Все настроенные методы аутентификации не удались

При этом VSCode запрашивает пароль для root@container-ip.

Я думаю, я помню, что настраивал что-то в моем уже довольно старом настройке LXC, но не могу вспомнить что. Нужно ли настраивать что-то конкретное для работы Incus? SELinux, может быть? (Обычный подозреваемый)

ПРИМЕЧАНИЕ: если это имеет значение, я установил LXC/LXD с помощью Snap, а Incus с помощью DNF.

Проблема в incus file push ….

По умолчанию Incus загружает файлы не от имени пользователя root. Если вы внимательно посмотрите на разрешения файла с помощью incus exec [container_id] -- ls -l /root/.ssh/authorized_keys, вы увидите

-rw-r--r--. 1 ubuntu ubuntu 567 Sep  2 08:15 /root/.ssh/authorized_keys

Два ubuntu означают, что они принадлежат пользователю по умолчанию, не являющемуся root. Вы можете просто исправить это, выполнив:

incus exec [container_id] -- chown root:root /root/.ssh/authorized_keys

Я не знаю, можно ли настроить владельца файлов, загружаемых с помощью этой команды (и где).

В следующий раз вы можете определить пользователя и группу при загрузке:

incus file push --uid 0 --gid 0 ~/.ssh/id_rsa.pub [container_id]/root/.ssh/authorized_keys

Параметры --uid 0 и --gid 0 определяют, что вы загружаете как пользователь 0 (root) и группу 0 (root) соответственно.

Ответ или решение

Чтобы получить доступ к контейнеру Incus с помощью SSH через VSCode (VSCodium) и устранить проблемы с аутентификацией, следуйте приведенным ниже шагам:

Шаг 1: Настройка SSH-доступа в контейнере

При выполнении операций с контейнерами Incus, важно учитывать, что по умолчанию любые файлы, отправляемые с помощью команды incus file push, принадлежат непользовательскому аккаунту. Потому очень возможно, что файл authorized_keys, в который вы помещаете публичный SSH ключ, будет иметь неправильные разрешения и владельца.

1.1. Проверка разрешений

Сначала проверьте разрешения файла authorized_keys так:

incus exec [container_id] -- ls -l /root/.ssh/authorized_keys

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

1.2. Исправление прав

Если файл authorized_keys принадлежит другому пользователю, измените владельца на root:

incus exec [container_id] -- chown root:root /root/.ssh/authorized_keys

Шаг 2: Использование команды incus file push

Чтобы избежать проблем с правами доступа в будущем, вы можете использовать опции --uid и --gid, чтобы установить правильного владельца и группу при загрузке файлов:

incus file push --uid 0 --gid 0 ~/.ssh/id_rsa.pub [container_id]/root/.ssh/authorized_keys

Таким образом, вы выполните загрузку файлы с правами root.

Шаг 3: Настройка SSH-клиента

После настройки доступа к контейнеру следующим шагом будет убедиться, что ваш SSH-клиент правильно настроен. В /home/myusername/.ssh/config у вас должна быть запись для контейнера:

Host [container_id]
    HostName [container_ip]
    User root
    IdentityFile ~/.ssh/id_rsa
    PubKeyAuthentication yes

Убедитесь, что HostName указан правильно, и IP-адрес контейнера доступен из вашей сети.

Шаг 4: Параметры SELinux

Если вы используете SELinux, автовключение его режимов может ограничить доступ. Поэтому сначала проверьте текущий статус SELinux:

sestatus

Если SELinux включён, вероятно, это может влиять на подключение. Временное отключение SELinux может помочь (но его использование должно быть осмотрительным):

sudo setenforce 0

Если доступ работает с отключённым SELinux, вам следует рассмотреть возможность корректной настройки правил SELinux.

Заключение

Эти шаги должны помочь вам успешно подключиться к контейнеру Incus через SSH с использованием VSCode. Убедитесь, что вы правильно настраиваете права на файлы и параметры SSH, чтобы избежать дальнейших проблем с аутентификацией. Если проблемы сохраняются, рекомендуется проверить журналы ошибок SSH для дальнейшего анализа.

Оцените материал
Добавить комментарий

Капча загружается...