Как добавить SSH-ключ на хостинге, если в панели нет такого раздела
Эдгар Косулин 6 мин чтения
Серия «Хостинг без магии» · часть 19 из 19
Содержание
8 ноября клиент написал в поддержку два коротких вопроса: «Подключите доступ по SSH» и следом «Как установить SSH-ключ?». Потом третий: «А где в ispmanager это?» Вопрос справедливый. Раздела «SSH-ключи» в панели нашего хостинга нет, и искать его бесполезно.
Он и не нужен. Ключ кладётся прямо в домашнюю папку вашей учётной записи на сервере, обычно одной командой со своего компьютера. Ниже по шагам: как это сделать на Linux, macOS и Windows, как пустить по ключу SFTP и что чаще всего мешает войти. А в конце о том, как в этом же обращении ошибся наш ИИ-помощник.
Зачем ключ, если есть пароль
На хостинге SSH-пароль совпадает с паролем от панели ispmanager. Это удобно, пока вы заходите в консоль руками. Неудобно, когда тот же пароль нужно положить в скрипт деплоя, в настройки редактора кода или в FTP-программу: он оседает в нескольких местах, а после смены пароля всё это перестаёт работать.
С ключом пароль в настройках не хранится. Сменили пароль от панели, а вход по ключу продолжает работать. Если ключ утёк вместе со старым ноутбуком, его удаляют из одного файла на сервере, и пароль менять не обязательно.
Как устроена пара ключей и почему её почти невозможно подобрать, мы подробно писали в статье SSH-ключи за 10 минут: настраиваем вход без пароля. Там речь о своём сервере с правами root. На хостинге прав root нет, поэтому часть шагов отличается.
Создайте ключ у себя на компьютере
Ключ создают на своём компьютере, не на хостинге. В терминале Linux или macOS, а на Windows 10 и 11 в PowerShell:
ssh-keygen -t ed25519
Путь, который предложит программа, оставьте как есть. Парольную фразу задать стоит: это защита самого файла ключа на случай, если его украдут с компьютера, а не пароль от хостинга.
Появятся два файла. id_ed25519 без расширения остаётся у вас, никуда его не отправляйте, в том числе в поддержку. id_ed25519.pub можно отдавать кому угодно: это одна строка, которая начинается с ssh-ed25519. На хостинг уходит только она.
Если у вас уже есть ключ, например для GitHub, новый создавать не обязательно. Подойдёт и старый, достаточно отнести на хостинг его .pub.
Положите ключ на хостинг одной командой
В Linux и macOS есть утилита ssh-copy-id, она делает всё сама:
ssh-copy-id -i ~/.ssh/id_ed25519.pub логин@isp.siteko.net
Вместо логин подставьте логин учётной записи хостинга, тот же, что для входа в панель. Команда один раз спросит пароль от панели, допишет ключ в файл ~/.ssh/authorized_keys на сервере и выставит нужные права. Дальше проверьте вход:
ssh логин@isp.siteko.net
Если сервер пустил без пароля (или спросил только парольную фразу ключа), всё готово.
Если ssh-copy-id нет: Windows и ручной способ
В Windows клиент ssh и ssh-keygen встроены, а ssh-copy-id нет. Ту же работу в PowerShell делает такая строка:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh логин@isp.siteko.net "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Можно и полностью вручную. Зайдите на хостинг по SSH с паролем и выполните:
mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo "ВАШ_КЛЮЧ" >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
Вместо ВАШ_КЛЮЧ вставьте целиком строку из файла id_ed25519.pub, без переносов. Ключей в файле может быть несколько, по одному на строку: например, рабочий ноутбук, домашний компьютер и сервис, который выкладывает сайт.
Права здесь не формальность. Если папка .ssh или файл authorized_keys доступны на запись кому-то кроме вас, SSH-сервер молча проигнорирует ключ и снова спросит пароль. Поэтому chmod 700 и chmod 600 в команде обязательны.
SFTP по тому же ключу
SFTP работает поверх SSH: тот же сервер, тот же логин, тот же ключ. После того как ключ лёг в authorized_keys, FileZilla и WinSCP тоже можно пустить по нему, без пароля в настройках.
В FileZilla в менеджере сайтов выберите протокол SFTP и вход по файлу ключа, затем укажите файл id_ed25519. В WinSCP файл ключа указывают в расширенных настройках входа, в разделе SSH об аутентификации. Обе программы могут предложить перевести ключ в свой формат PuTTY: соглашайтесь, исходный файл при этом не меняется.
Так же работает вход по ключу из VS Code и PhpStorm, а скрипт деплоя по ключу перестаёт зависеть от пароля. Как выложить сайт через Git без FTP, мы разбирали в статье Деплой без FTP на виртуальном хостинге.
Почему не пускает
Логин от FTP вместо логина учётной записи
В панели можно завести отдельных FTP-пользователей, но SSH и SFTP их не знают: входить нужно под основным логином учётки. Именно на этом в начале ноября споткнулся другой клиент. Его SFTP-программа дважды попробовала войти под именем FTP-пользователя, и защита от подбора паролей заблокировала его адрес на сутки. Сразу понять, в чём дело, было невозможно: со стороны клиента это выглядело как «SFTP не работает».
После переустановки сервера в ночь на 8 ноября защиту мы смягчили. Теперь адрес блокируется на час, после третьего неудачного входа, и только при повторах дольше. Если ваш вход вдруг перестал отвечать вовсе, а с другого интернета (например, с телефона) он работает, напишите в поддержку, снимем блокировку.
SSH не входит в тариф
У нас SSH есть на тарифах Master и Expert, на Start и Optima его нет.
Ключ лёг не туда или с переносом строки
Проверьте, что вы подключаетесь под тем же логином, которому клали ключ, и что в authorized_keys ключ записан одной строкой. Подробности покажет ssh -v логин@isp.siteko.net: в выводе видно, какой ключ клиент предложил и что ответил сервер.
Вход по паролю выключить нельзя
На своём сервере после настройки ключа пароли обычно запрещают. На хостинге это настройка всего сервера, а не вашей учётки, поэтому пароль остаётся запасным способом войти. От перебора паролей сервер защищает та самая блокировка адресов.
Где ошибся наш ИИ-помощник
На первое сообщение клиента ответил наш ИИ-помощник, через несколько секунд. Он уверенно написал, что SSH уже включён, и дал адрес, логин и пароль. Это была неправда: SSH у этой учётной записи был выключен.
Помощник смотрел на тариф. На Master SSH положен, отсюда и вывод «включён». Но доступ включается не тарифом, а настройкой самой учётной записи в панели. У части учёток она осталась выключенной после переноса из старого биллинга, а при смене тарифа SSH сам не включался и не выключался.
На вопрос про ключ помощник ответил честнее: объяснил, как создать ключ, и прямо написал, что подтверждённой инструкции по добавлению ключа у него нет, поэтому путь в панели он выдумывать не станет и передаёт вопрос оператору. Оператор включил SSH и прислал те команды, что выше.
В тот же день мы поправили оба места. Помощник теперь проверяет, включён ли SSH у самой учётной записи в панели, а не только в тарифе, и если тариф его даёт, а учётка нет, зовёт оператора. При переходе на Master или Expert SSH включается сам, при переходе на Start или Optima выключается.
Как это устроено на Siteko. SSH и SFTP есть на тарифах Master и Expert. Сервер
isp.siteko.net, порт 22, логин и пароль те же, что для входа в панель ispmanager. Ключи кладутся в~/.ssh/authorized_keysвашей учётной записи, как описано выше, отдельного раздела в панели для этого нет. Если на Master или Expert SSH не пускает, напишите в поддержку: проверим учётку и включим доступ.
Если с консолью вы пока на «вы», начните со статьи SSH для тех, кто боится чёрного экрана. Зачем SSH нужен современным PHP-проектам и что ещё проверить на хостинге под Laravel, написано в статьях Современный PHP-хостинг: зачем Laravel и Symfony нужны SSH, Composer и Node.js и Переносим готовый Laravel-проект на хостинг.
Серия
Хостинг без магии
- 1. Как выбрать хостинг для сайта и не купить себе вторую работу
- 2. Виртуальный хостинг, VPS или облако: что действительно нужно вашему сайту
- 3. Гигабайты ничего не решают: как читать характеристики тарифа хостинга
- 4. «Безлимитный» хостинг: что заканчивается раньше дискового пространства
- 5. Домен подключён, а сайт не открывается: DNS без мистики
- 6. HTTPS включён, а браузер всё равно ругается: SSL без паники
- 7. Письма с сайта пропадают: SMTP, SPF, DKIM и DMARC на пальцах
- 8. Современный PHP-хостинг: зачем Laravel и Symfony нужны SSH, Composer, Node.js, cron и отдельная public-директория
- 9. Деплой без FTP на виртуальном хостинге: Git, Composer и безопасный откат
- 10. Ошибка 500 после загрузки сайта: где искать причину до обращения в поддержку
- 11. Сайт тормозит на хостинге: виноват тариф, код, база или внешний сервис
- 12. Бэкап есть, восстановить нельзя: проверяем резервные копии до аварии
- 13. Переезд на другой хостинг без потери сайта, писем и заказов
- 14. Когда виртуальный хостинг стал тесен: пора на VPS или ещё можно остаться
- 15. Коды подтверждения не приходят на почту: лимит отправки писем на хостинге
- 16. Старый сайт на PHP 5.4 после переезда на MySQL 8: «Got packets out of order» и как его оживить
- 17. Переносим готовый Laravel-проект на хостинг: почему не по FTP и что сделать после загрузки
- 18. Хостинг переехал на новый сервер за ночь: что мы сделали 7–8 ноября, что пошло не так и что проверить на своём сайте
- 19. Как добавить SSH-ключ на хостинге, если в панели нет такого раздела
Новые статьи и разборы — в канале Siteko: Telegram MAX
Подписчикам: +30 дней к пробному хостингу, клиентам: +150 ₽ на баланс