Sis admin linux: различия между версиями
Artem (обсуждение | вклад) Новая страница: «= SSH-доступ с macOS к LXC-контейнеру Proxmox по ключу = == Назначение == Инструкция позволяет настроить подключение с Mac к LXC-контейнеру Proxmox по SSH без ввода пароля пользователя root. Публичный ключ добавляется через консоль Proxmox, поэтому знать или создавать пароль roo...» |
Artem (обсуждение | вклад) Нет описания правки |
||
| Строка 1: | Строка 1: | ||
Небольшие инструкции, полезные команды и практические приёмы администрирования Linux. | |||
'''Все IP-адреса, имена и идентификаторы приведены для примера. Заменяйте их значениями своей инфраструктуры.''' | |||
__TOC__ | |||
== SSH-доступ с macOS к LXC-контейнеру Proxmox по ключу == | |||
=== Назначение === | |||
Подключение с Mac к LXC-контейнеру по SSH без ввода пароля root. | |||
Публичный ключ добавляется через консоль Proxmox. Знать или создавать пароль root контейнера для этого не требуется. | |||
{| class="wikitable" | {| class="wikitable" | ||
! Параметр !! | ! Параметр !! Значение для примера | ||
|- | |- | ||
| ID контейнера || 123 | | ID контейнера || 123 | ||
| Строка 23: | Строка 27: | ||
|} | |} | ||
=== Что необходимо === | |||
== | |||
SSH- | * Административный доступ к консоли узла Proxmox. | ||
* Запущенный LXC-контейнер с работающим SSH-сервером. | |||
* Сетевая доступность контейнера с Mac — через локальную сеть или VPN. | |||
* Разрешённый на SSH-сервере вход root по публичному ключу. | |||
== 1. Создание | === 1. Создание ключа на Mac === | ||
Открыть | Открыть '''Терминал на Mac''' и выполнить: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 50: | Строка 46: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Существующий ключ не перезаписывается. | |||
При создании нового ключа появляются два файла: | |||
{| class="wikitable" | {| class="wikitable" | ||
| Строка 58: | Строка 54: | ||
|- | |- | ||
| <code>~/.ssh/id_ed25519</code> | | <code>~/.ssh/id_ed25519</code> | ||
| Приватный ключ. Остаётся на Mac | | Приватный ключ. Остаётся на Mac. Его нельзя публиковать или передавать. | ||
|- | |- | ||
| <code>~/.ssh/id_ed25519.pub</code> | | <code>~/.ssh/id_ed25519.pub</code> | ||
| Публичный ключ. Добавляется на сервер | | Публичный ключ. Добавляется на сервер. | ||
|} | |} | ||
'''Важно:''' параметр <code>-N ""</code> создаёт | '''Важно:''' параметр <code>-N ""</code> создаёт ключ без парольной фразы. Получивший приватный ключ сможет использовать его для подключения к серверам, где разрешён соответствующий публичный ключ. | ||
Если нужна защита ключа парольной фразой, при отсутствии ключа вместо команды выше | Если нужна защита ключа парольной фразой, при отсутствии ключа вместо команды выше выполнить: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 72: | Строка 68: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 2. | Парольную фразу такого ключа можно сохранить в связке ключей macOS — порядок приведён ниже. | ||
=== 2. Копирование публичного ключа === | |||
'''На Mac''' выполнить: | '''На Mac''' выполнить: | ||
| Строка 80: | Строка 78: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Скопировать всю строку, начинающуюся с <code>ssh-ed25519</code> | Скопировать всю выведенную строку, начинающуюся с <code>ssh-ed25519</code>. | ||
''' | '''Нужен именно публичный ключ:''' | ||
* | * Копировать строку целиком, без добавления переносов. | ||
* | * Не копировать отпечаток <code>SHA256:...</code>. | ||
* | * Не копировать графический рисунок ключа. | ||
* Не передавать содержимое приватного файла <code>id_ed25519</code>. | |||
Если приватный ключ существует, | Если приватный ключ существует, но файл <code>.pub</code> отсутствует, восстановить публичный ключ: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 96: | Строка 93: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 3. Вход в контейнер через Proxmox == | === 3. Вход в контейнер через Proxmox === | ||
В веб-интерфейсе Proxmox | В веб-интерфейсе Proxmox открыть '''Shell узла, на котором запущен контейнер'''. | ||
Выполнить, заменив <code>123</code> фактическим ID контейнера: | Выполнить, заменив <code>123</code> фактическим ID контейнера: | ||
| Строка 106: | Строка 103: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Следующие команды выполняются '''внутри контейнера от имени root'''. | |||
=== 4. Добавление ключа в контейнер === | |||
Подготовить каталог и файл: | |||
Подготовить каталог: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
mkdir -p /root/.ssh | mkdir -p /root/.ssh | ||
touch /root/.ssh/authorized_keys | |||
chown root:root /root/.ssh /root/.ssh/authorized_keys | |||
chmod 700 /root/.ssh | chmod 700 /root/.ssh | ||
chmod 600 /root/.ssh/authorized_keys | |||
</syntaxhighlight> | </syntaxhighlight> | ||
В следующей команде заменить <code>ВСТАВЬ_ПУБЛИЧНЫЙ_КЛЮЧ</code> | В следующей команде заменить <code>ВСТАВЬ_ПУБЛИЧНЫЙ_КЛЮЧ</code> скопированной строкой с Mac, сохранив одинарные кавычки: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
printf '\n%s\n' 'ВСТАВЬ_ПУБЛИЧНЫЙ_КЛЮЧ' >> /root/.ssh/authorized_keys | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Оператор <code>>></code> добавляет | Оператор <code>>></code> добавляет запись в конец файла и сохраняет ранее добавленные ключи. | ||
Начальный перенос строки не позволяет новому ключу склеиться с предыдущей записью. Пустые строки в файле допустимы. | |||
'''Перезапуск SSH | '''Перезапуск SSH после добавления ключа не требуется.''' | ||
== 5. Проверка | === 5. Проверка подлинности сервера === | ||
При первом подключении Mac может запросить подтверждение | При первом подключении Mac может запросить подтверждение ключа сервера. | ||
Чтобы | Чтобы узнать отпечаток ключа ED25519, выполнить '''внутри контейнера через консоль Proxmox''': | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 148: | Строка 139: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Сравнить | Сравнить отпечаток <code>SHA256:...</code> с тем, который покажет Mac при подключении. | ||
Сравнивать нужно ключи одного типа: в | '''Сравнивать нужно ключи одного типа''': в этом примере ED25519. | ||
== 6. Подключение с Mac == | === 6. Подключение с Mac === | ||
'''В Терминале на Mac''' выполнить | '''В Терминале на Mac''' выполнить: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 160: | Строка 151: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Если | Заменить адрес на IP своего контейнера. | ||
Если появился запрос подтверждения ключа сервера и отпечаток совпадает с проверенным, ввести: | |||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
| Строка 168: | Строка 161: | ||
При успешной настройке откроется оболочка контейнера без запроса пароля root. | При успешной настройке откроется оболочка контейнера без запроса пароля root. | ||
Для завершения | Для завершения подключения: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 174: | Строка 167: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | === 7. Сохранение парольной фразы ключа в macOS === | ||
'''Этот шаг нужен только для ключа, защищённого парольной фразой.''' | |||
Запрос <code>Enter passphrase for key</code> | Запрос <code>Enter passphrase for key</code> относится к приватному ключу на Mac, а не к паролю root контейнера. | ||
На Mac выполнить: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 186: | Строка 181: | ||
Ввести парольную фразу ключа. | Ввести парольную фразу ключа. | ||
Для | Для автоматического использования связки ключей добавить настройки из следующего раздела. | ||
== Короткая команда подключения == | === 8. Короткая команда подключения === | ||
Можно назначить подключению понятное имя, например <code>my-container</code>. | |||
'''На Mac''' открыть файл настроек: | '''На Mac''' открыть файл настроек SSH: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 200: | Строка 195: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Добавить | Добавить блок, заменив адрес на нужный: | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
| Строка 211: | Строка 206: | ||
UseKeychain yes | UseKeychain yes | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Если блок <code>Host my-container</code> уже существует, изменить его вместо создания дубликата. Если в файле есть общий блок <code>Host *</code>, этот отдельный блок разместить перед ним. | |||
Сохранить файл в nano: | Сохранить файл в nano: | ||
| Строка 224: | Строка 221: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Теперь | Теперь подключение выполняется короткой командой: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 230: | Строка 227: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Диагностика == | === Диагностика === | ||
=== | ==== Запрашивается пароль root ==== | ||
Авторизация по ключу не завершилась успешно. | |||
На Mac | На Mac выполнить подключение с явным указанием ключа и подробным выводом: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 242: | Строка 239: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Внутри контейнера через консоль Proxmox проверить: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 254: | Строка 251: | ||
! Объект !! Права !! Владелец | ! Объект !! Права !! Владелец | ||
|- | |- | ||
| <code>/root/.ssh</code> | | | <code>/root/.ssh</code> | ||
| <code>700</code> — <code>drwx------</code> | |||
| root | |||
|- | |- | ||
| <code>/root/.ssh/authorized_keys</code> | | | <code>/root/.ssh/authorized_keys</code> | ||
| <code>600</code> — <code>-rw-------</code> | |||
| root | |||
|} | |} | ||
Проверить, что: | |||
* В файле находится публичный ключ с нужного Mac. | |||
* Ключ записан одной строкой. | |||
* Указаны правильные IP-адрес и пользователь. | |||
* SSH-сервер разрешает авторизацию по ключу и вход root по ключу. | |||
==== Connection refused ==== | |||
Соединение отклонено. | |||
Проверить правильность адреса, работу SSH-сервера и порт подключения. Также причиной может быть правило межсетевого экрана, отклоняющее соединение. | |||
==== Connection timed out ==== | |||
Сервер не ответил за отведённое время. | |||
Проверить: | Проверить: | ||
* Запущен ли контейнер. | * Запущен ли контейнер. | ||
* Доступна ли его | * Доступна ли его сеть с Mac. | ||
* Подключён ли нужный VPN. | * Подключён ли нужный VPN. | ||
* Не блокируется ли SSH-порт межсетевым экраном. | * Не блокируется ли SSH-порт межсетевым экраном. | ||
=== | ==== REMOTE HOST IDENTIFICATION HAS CHANGED ==== | ||
Сохранённый на Mac ключ сервера отличается от текущего. | |||
Причиной может быть переустановка контейнера, замена ключей SSH или появление другого устройства по тому же адресу. | |||
Сначала проверить новый отпечаток через доверенную консоль Proxmox. Не удалять старую запись без проверки причины изменения. | |||
=== Примечания === | |||
Настройка сохраняется после перезагрузки Mac и контейнера. | * Настройка сохраняется после перезагрузки Mac и контейнера. | ||
* Для каждого дополнительного компьютера можно создать собственный ключ и добавить его публичную часть отдельной строкой в <code>authorized_keys</code>. | |||
* Чтобы отозвать доступ конкретного ключа, удалить соответствующую строку из <code>authorized_keys</code>. Уже открытые SSH-сеансы при этом не завершаются. | |||
* Добавление ключа само по себе не отключает парольную авторизацию SSH. | |||
* Приватные ключи, пароли и другие секреты не должны попадать в публичную документацию. | |||
<!-- Следующую хитрость добавляйте ниже отдельным разделом: | |||
== Название хитрости == | |||
Описание и команды. | |||
--> | |||
Версия от 21:20, 28 сентября 2026
Небольшие инструкции, полезные команды и практические приёмы администрирования 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:
- Нажать
Control + O. - Нажать
Enter. - Нажать
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.
- Приватные ключи, пароли и другие секреты не должны попадать в публичную документацию.