# SSH-доступ на хостингу cPanel: ключі та jailshell

> SSH-доступ на хостингу cPanel працює через jailshell: увімкнення доступу, SSH-ключ і дозволені команди.

## Що таке SSH-доступ на віртуальному хостингу

SSH-доступ на shared-хостингу відрізняється від доступу на VDS: замість повноцінної оболонки з root-правами користувач потрапляє в jailshell — ізольоване середовище, обмежене його домашньою директорією. Це захищає інших клієнтів на тому самому сервері: ви не бачите чужі файли і не можете змінювати системні налаштування.

Такого доступу достатньо для [git-деплою](https://www.zevshost.net/uk/kb/nastroit-git-deploy/), запуску composer, wp-cli, npm-скриптів збірки та звичайної роботи з файлами через rsync або scp — усе, що не потребує зміни версії ядра або встановлення системних пакетів.

## Як увімкнути SSH-доступ у cPanel

У розділі «Security» відкрийте «SSH Access» → «Manage SSH Keys». Якщо пункту немає в інтерфейсі, доступ по SSH для акаунта вмикає підтримка хостингу за заявкою в тікет — на більшості тарифів функція доступна одразу, але може бути вимкнена за замовчуванням із міркувань безпеки.

Дані для підключення: ім'я хоста або IP сервера, ім'я користувача cPanel і порт SSH — зазвичай нестандартний, відмінний від 22. Точний порт вказаний у розділі «SSH Access» або в листі з даними акаунта.

## Підключення за SSH-ключем

Пароль для SSH використовувати не варто — ключова пара надійніша і не боїться перебору. Згенеруйте пару на своєму комп'ютері:

```
ssh-keygen -t ed25519 -C "deploy@example.com" -f ~/.ssh/zevshost_key
```

Публічний ключ (файл з розширенням .pub) додайте в cPanel через «Manage SSH Keys» → «Import Key», вставивши його вміст цілком. Після імпорту натисніть «Authorize» навпроти ключа — без цього кроку сервер продовжить просити пароль.

Підключення з явною вказівкою ключа і порту:

```
ssh -i ~/.ssh/zevshost_key -p 2222 username@example.com
```

## Що доступно в jailshell, а що ні

| Дія | Доступно |
| --- | --- |
| Робота з файлами всередині своєї директорії | Так |
| git clone, composer, npm, wp-cli | Так |
| rsync і scp між серверами | Так |
| sudo і встановлення системних пакетів | Ні |
| Перегляд процесів інших користувачів | Ні |
| Зміна версії PHP з консолі | Ні, лише через MultiPHP Manager |

Версію PHP для CLI-скриптів у jailshell бере значення, виставлене в [MultiPHP Manager](https://www.zevshost.net/uk/kb/php-version-cpanel/) для домену — командою php -v можна лише перевірити поточну версію, а не змінити її.

## Типові команди у щоденній роботі

Перевірка зайнятого місця і структури сайту після підключення:

```
cd ~/public_html
du -sh * | sort -rh | head -10
```

Оновлення залежностей проєкту на PHP і запуск відкладеного завдання через [cron](https://www.zevshost.net/uk/kb/cron-zadachi-cpanel/) вручну для перевірки:

```
composer install --no-dev --optimize-autoloader
php artisan schedule:run
```

## Підсумок: чек-лист безпечної роботи по SSH

- Вимкніть вхід за паролем там, де це дозволяє панель, і використовуйте лише ключ.
- Зберігайте приватний ключ поза репозиторієм і не пересилайте його в месенджерах.
- Вказуйте нестандартний порт SSH з листа з даними акаунта, а не порт 22.
- Пам'ятайте: jailshell не дає root — частина команд зі встановлення ПЗ не працюватиме.
- Для зміни PHP використовуйте MultiPHP Manager, а не змінні середовища в shell.

## Типові помилки SSH-доступу на shared

| Повідомлення | Причина |
| --- | --- |
| Permission denied (publickey) | Приватний ключ на компʼютері не відповідає завантаженому публічному, або публічний ключ додано, але для нього не натиснуто кнопку Authorize в cPanel |
| Connection refused на порту 22 | На shared-хостингу SSH майже ніколи не слухає порт 22 — потрібен нестандартний порт з листа з даними акаунта або розділу SSH Access |
| This service allows sftp connections only | Акаунту увімкнено лише SFTP без повноцінної оболонки — потрібно запросити активацію shell-доступу у підтримки хостингу |
| bash: composer: command not found | Composer не встановлено глобально в середовищі jailshell; використовуйте локальний composer.phar або вбудований Composer з MultiPHP Manager |
| sudo: command not found | Це очікувана поведінка jailshell, а не помилка — sudo фізично відсутній в ізольованому середовищі, підвищення прав тут неможливе в принципі |

## Коли SSH на shared-хостингу перестає вистачати

- Потрібен власний демон, що постійно слухає порт (черга завдань, WebSocket-сервер) — jailshell не дозволяє тримати довгоживучі процеси поза лімітами спільного тарифу
- Потрібне встановлення системних пакетів або розширень PHP за межами стандартного набору хостингу — для цього потрібен root, якого в jailshell немає і не може бути
- Потрібен повний контроль над мережевими налаштуваннями — власні правила файрвола, кастомний DNS-резолвер, зміна ядра — все це доступно лише на VDS
- Збірка фронтенду (npm run build на великому проєкті) впирається в ліміти CPU і памʼяті спільного тарифу — процес просто обривається за лімітом, і збільшити його для jailshell не можна

## Перевірка результату

Після налаштування підключення переконайтеся, що ключ справді працює і ви перебуваєте саме в jailshell, а не отримали відмову мовчки. Якщо можливостей jailshell не вистачає і потрібен перехід на VDS, почніть зі статті [про підключення до VDS по SSH](https://www.zevshost.net/uk/kb/podklyuchenie-vds-ssh/); для FTP як альтернативного каналу — стаття [про налаштування FTP в cPanel](https://www.zevshost.net/uk/kb/nastroit-ftp-cpanel/).

```
# Підключитися в докладному режимі і побачити, який ключ справді використано
ssh -v -i ~/.ssh/zevshost_key -p 2222 username@example.com

# Переконатися, що ви в jailshell, а не отримали повноцінний root-шелл
whoami && ulimit -a
```

---

Джерело: https://www.zevshost.net/uk/kb/cpanel-ssh-dostup-shared/
Оновлено: 2026-09-30
