Небольшие инструкции, полезные команды и практические приёмы администрирования Linux.

Все IP-адреса, имена и идентификаторы приведены для примера. Заменяйте их значениями своей инфраструктуры.

SSH-доступ с macOS к LXC-контейнеру Proxmox по ключу

Назначение

Подключение с Mac к LXC-контейнеру по SSH без ввода пароля root.

Публичный ключ добавляется через консоль Proxmox. Знать или создавать пароль root контейнера для этого не требуется.

Параметр Значение для примера
ID контейнера 123
IP-адрес контейнера 192.168.2.2
Пользователь SSH root
Клиент Mac с macOS
Тип ключа Ed25519

Что необходимо

  • Административный доступ к консоли узла Proxmox.
  • Запущенный LXC-контейнер с работающим SSH-сервером.
  • Сетевая доступность контейнера с Mac — через локальную сеть или VPN.
  • Разрешённый на SSH-сервере вход root по публичному ключу.

1. Создание ключа на Mac

Открыть Терминал на Mac и выполнить:

if [ ! -f ~/.ssh/id_ed25519 ]; then
  ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
else
  echo "SSH-ключ уже существует."
fi

Существующий ключ не перезаписывается.

При создании нового ключа появляются два файла:

Файл Назначение
~/.ssh/id_ed25519 Приватный ключ. Остаётся на Mac. Его нельзя публиковать или передавать.
~/.ssh/id_ed25519.pub Публичный ключ. Добавляется на сервер.

Важно: параметр -N "" создаёт ключ без парольной фразы. Получивший приватный ключ сможет использовать его для подключения к серверам, где разрешён соответствующий публичный ключ.

Если нужна защита ключа парольной фразой, при отсутствии ключа вместо команды выше выполнить:

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

Парольную фразу такого ключа можно сохранить в связке ключей macOS — порядок приведён ниже.

2. Копирование публичного ключа

На Mac выполнить:

cat ~/.ssh/id_ed25519.pub

Скопировать всю выведенную строку, начинающуюся с ssh-ed25519.

Нужен именно публичный ключ:

  • Копировать строку целиком, без добавления переносов.
  • Не копировать отпечаток SHA256:....
  • Не копировать графический рисунок ключа.
  • Не передавать содержимое приватного файла id_ed25519.

Если приватный ключ существует, но файл .pub отсутствует, восстановить публичный ключ:

ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub

3. Вход в контейнер через Proxmox

В веб-интерфейсе Proxmox открыть Shell узла, на котором запущен контейнер.

Выполнить, заменив 123 фактическим ID контейнера:

pct enter 123

Следующие команды выполняются внутри контейнера от имени root.

4. Добавление ключа в контейнер

Подготовить каталог и файл:

mkdir -p /root/.ssh
touch /root/.ssh/authorized_keys
chown root:root /root/.ssh /root/.ssh/authorized_keys
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

В следующей команде заменить ВСТАВЬ_ПУБЛИЧНЫЙ_КЛЮЧ скопированной строкой с Mac, сохранив одинарные кавычки:

printf '\n%s\n' 'ВСТАВЬ_ПУБЛИЧНЫЙ_КЛЮЧ' >> /root/.ssh/authorized_keys

Оператор >> добавляет запись в конец файла и сохраняет ранее добавленные ключи.

Начальный перенос строки не позволяет новому ключу склеиться с предыдущей записью. Пустые строки в файле допустимы.

Перезапуск SSH после добавления ключа не требуется.

5. Проверка подлинности сервера

При первом подключении Mac может запросить подтверждение ключа сервера.

Чтобы узнать отпечаток ключа ED25519, выполнить внутри контейнера через консоль Proxmox:

ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

Сравнить отпечаток SHA256:... с тем, который покажет Mac при подключении.

Сравнивать нужно ключи одного типа: в этом примере ED25519.

6. Подключение с Mac

В Терминале на Mac выполнить:

ssh root@192.168.2.2

Заменить адрес на IP своего контейнера.

Если появился запрос подтверждения ключа сервера и отпечаток совпадает с проверенным, ввести:

yes

При успешной настройке откроется оболочка контейнера без запроса пароля root.

Для завершения подключения:

exit

7. Сохранение парольной фразы ключа в macOS

Этот шаг нужен только для ключа, защищённого парольной фразой.

Запрос Enter passphrase for key относится к приватному ключу на Mac, а не к паролю root контейнера.

На Mac выполнить:

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Ввести парольную фразу ключа.

Для автоматического использования связки ключей добавить настройки из следующего раздела.

8. Короткая команда подключения

Можно назначить подключению понятное имя, например my-container.

На Mac открыть файл настроек SSH:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/config

Добавить блок, заменив адрес на нужный:

Host my-container
    HostName 192.168.2.2
    User root
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
    AddKeysToAgent yes
    UseKeychain yes

Если блок Host my-container уже существует, изменить его вместо создания дубликата. Если в файле есть общий блок Host *, этот отдельный блок разместить перед ним.

Сохранить файл в nano:

  1. Нажать Control + O.
  2. Нажать Enter.
  3. Нажать Control + X.

Установить права:

chmod 600 ~/.ssh/config

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

ssh my-container

Диагностика

Запрашивается пароль root

Авторизация по ключу не завершилась успешно.

На Mac выполнить подключение с явным указанием ключа и подробным выводом:

ssh -v -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 root@192.168.2.2

Внутри контейнера через консоль Proxmox проверить:

ls -ld /root/.ssh
ls -l /root/.ssh/authorized_keys

Ожидаемые параметры:

Объект Права Владелец
/root/.ssh 700 — drwx------ root
/root/.ssh/authorized_keys 600 — -rw------- root

Проверить, что:

  • В файле находится публичный ключ с нужного Mac.
  • Ключ записан одной строкой.
  • Указаны правильные IP-адрес и пользователь.
  • SSH-сервер разрешает авторизацию по ключу и вход root по ключу.

Connection refused

Соединение отклонено.

Проверить правильность адреса, работу SSH-сервера и порт подключения. Также причиной может быть правило межсетевого экрана, отклоняющее соединение.

Connection timed out

Сервер не ответил за отведённое время.

Проверить:

  • Запущен ли контейнер.
  • Доступна ли его сеть с Mac.
  • Подключён ли нужный VPN.
  • Не блокируется ли SSH-порт межсетевым экраном.

REMOTE HOST IDENTIFICATION HAS CHANGED

Сохранённый на Mac ключ сервера отличается от текущего.

Причиной может быть переустановка контейнера, замена ключей SSH или появление другого устройства по тому же адресу.

Сначала проверить новый отпечаток через доверенную консоль Proxmox. Не удалять старую запись без проверки причины изменения.

Примечания

  • Настройка сохраняется после перезагрузки Mac и контейнера.
  • Для каждого дополнительного компьютера можно создать собственный ключ и добавить его публичную часть отдельной строкой в authorized_keys.
  • Чтобы отозвать доступ конкретного ключа, удалить соответствующую строку из authorized_keys. Уже открытые SSH-сеансы при этом не завершаются.
  • Добавление ключа само по себе не отключает парольную авторизацию SSH.
  • Приватные ключи, пароли и другие секреты не должны попадать в публичную документацию.