Вопрос или проблема
Контекст
У меня есть хост, работающий на 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 для дальнейшего анализа.