На Mac и в Linux SSH-клиент уже встроен, ставить ничего не нужно. Показываем первое подключение по паролю, переход на вход по ключу, файл ~/.ssh/config ради короткой команды и что делать с частыми ошибками.

SSH (secure shell) - протокол для защищённого доступа к командной строке удалённого сервера. Хорошая новость: чтобы подключиться к серверу по SSH из macOS и Linux, отдельную программу ставить не нужно - клиент уже встроен, всё делается в приложении «Терминал». В инструкции: где взять адрес и пароль, как зайти первый раз по паролю, как перейти на вход по ключу и как больше не набирать длинную команду каждый раз.

Коротко. Возьмите на странице сервера в панели my.weasel.cloud IP-адрес и пароль root. В терминале: ssh root@IP, подтвердите отпечаток словом yes, введите пароль и сразу смените его командой passwd. Дальше создайте ключ - ssh-keygen -t ed25519 - и скопируйте его на сервер через ssh-copy-id: пароль больше не понадобится. Пропишите сервер в ~/.ssh/config, чтобы подключаться одной командой ssh myvps.

Что нужно перед началом

  • Mac или компьютер с Linux. Клиент OpenSSH встроен в macOS и входит во все популярные дистрибутивы Linux. Проверить, что он на месте: ssh -V - выведет версию вроде OpenSSH_9.6p1.
  • Данные сервера: IP-адрес, имя пользователя (на новом сервере это root) и первичный пароль. Где их взять - в следующем разделе.
  • Сервер запущен. В панели у него должен быть статус «активен». Если сервер только что создан, дайте ему минуту на загрузку.

Если сервера ещё нет, начните с инструкции Как заказать первый VPS.

Где взять IP-адрес, пользователя и пароль

Всё это выдаётся при создании сервера, в двух местах:

  • Панель my.weasel.cloud. Откройте страницу нужного сервера - там указаны IP-адрес (четыре числа через точку, например 203.0.113.10), пользователь (root) и пароль.
  • Письмо о создании сервера. Приходит на адрес, указанный в аккаунте, и содержит те же данные. Первичный пароль там открытым текстом - поэтому в шаге 2 мы его сменим.

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

Шаг 1. Подключитесь к серверу по SSH по паролю

Откройте терминал. На macOS - Программы -> Утилиты -> Терминал или поиск Spotlight по слову terminal. На Linux - «Терминал» в меню приложений. Введите команду, подставив свой IP:

ssh [email protected]

  • root - имя пользователя на сервере;
  • @ отделяет пользователя от адреса;
  • 203.0.113.10 - IP-адрес сервера из панели.

При первом подключении к новому серверу клиент покажет что-то вроде:

The authenticity of host '203.0.113.10 (203.0.113.10)' can't be established.
ED25519 key fingerprint is SHA256:aB3kZ...q9M.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Это не ошибка. Отпечаток (fingerprint) - короткий идентификатор ключа сервера. Клиент раньше этот сервер не видел, спрашивает разрешения запомнить его и предупреждает, что в дальнейшем будет сверять: если ключ вдруг поменяется, вас остановят (см. раздел про ошибку «REMOTE HOST IDENTIFICATION HAS CHANGED»).

Когда сверять отпечаток. Строго - открыть веб-консоль сервера в панели, выполнить там ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub и сравнить строку SHA256:... с той, что показал клиент. На только что созданном сервере, к которому ещё никто не подключался, риск подмены минимальный - можно просто набрать yes и нажать Enter. Ответ yes целиком, не y.

Дальше клиент запросит пароль:

[email protected]'s password:

Введите пароль из панели. Символы при вводе не отображаются - ни точек, ни звёздочек, это нормально. Пароль можно вставить: Cmd+V на macOS, Ctrl+Shift+V в большинстве терминалов Linux.

Что вы должны увидеть. Приглашение сменится на что-то вроде root@vps-12345:~# - это командная строка сервера. Вы внутри.

Шаг 2. Смените пароль root

Первичный пароль побывал в панели и в письме открытым текстом, поэтому первым делом задайте свой:

passwd

Команда попросит ввести новый пароль дважды (без отображения). Придумайте длинный - 16 символов и больше.

Что вы должны увидеть: passwd: password updated successfully. Всё, старый пароль больше не действует.

Подключение на нестандартном порту или под другим пользователем

По умолчанию SSH слушает порт 22. Если на сервере его перенесли (частая мера против перебора паролей), укажите порт флагом -p:

ssh -p 2222 [email protected]

Здесь -p 2222 - номер порта, user - имя нужного пользователя. Чтобы зайти под конкретным пользователем на стандартном порту, просто поставьте его имя перед @:

ssh [email protected]

Флаги комбинируются: ssh -p 2222 [email protected].

Шаг 3. Настройте вход по ключу

Пароль можно подобрать перебором, и его приходится вводить каждый раз. Ключ решает обе проблемы. Пара ключей - это два связанных файла:

  • приватный (id_ed25519) - остаётся только на вашем компьютере, никому не передаётся;
  • публичный (id_ed25519.pub) - кладётся на сервер. Сервер пускает того, кто докажет, что владеет парным приватным ключом.

Вход по паролю

Вход по ключу

Настройка

ничего не нужно, пароль уже выдан

один раз создать ключ и скопировать на сервер

Каждое подключение

вводите пароль

ничего не вводите (или только passphrase от файла ключа)

Подбор

пароль реально подобрать перебором

ключ ed25519 подобрать на практике нельзя

Когда использовать

только для самого первого входа

везде дальше; затем вход по паролю выключают

Создайте пару. Команду выполняете на своём компьютере, не на сервере:

ssh-keygen -t ed25519 -C "kate@macbook"

  • -t ed25519 - тип ключа. ed25519 современный, короткий и быстрый, подходит по умолчанию.
  • -C "kate@macbook" - комментарий-метка, чтобы потом на сервере было видно, чей это ключ. Обычно пишут почту или имя машины.

На вопрос про расположение файла нажмите Enter (оставит ~/.ssh/id_ed25519). На вопрос про passphrase - на выбор: можно задать пароль на сам файл ключа (защита, если ноутбук украдут), можно оставить пустым. Если задаёте - см. раздел про связку ключей ниже.

Что вы должны увидеть: в каталоге ~/.ssh/ появились два файла - id_ed25519 и id_ed25519.pub.

Теперь скопируйте публичный ключ на сервер. Проще всего готовой командой (спросит пароль root - последний раз):

ssh-copy-id [email protected]

Она сама создаст на сервере каталог ~/.ssh, допишет ваш публичный ключ в файл ~/.ssh/authorized_keys и выставит нужные права.

Если ssh-copy-id в системе нет (иногда на macOS), сделайте то же вручную одной строкой:

cat ~/.ssh/id_ed25519.pub | ssh [email protected] 'mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'

Команда читает ваш публичный ключ, передаёт его по SSH на сервер и там дописывает в authorized_keys, попутно выставляя права.

Проверка: выполните ssh [email protected] ещё раз. Если ключ подхватился, сервер пустит без запроса пароля (или спросит только passphrase от файла ключа, если вы её задавали).

Выключать вход по паролю на сервере - следующий разумный шаг, но это правка настроек sshd на сервере. Отдельная инструкция про отключение входа по паролю - скоро. Делайте это только после того, как убедились, что вход по ключу работает.

Шаг 4. Права на файлы ключей

SSH-клиент откажется использовать приватный ключ, к которому есть доступ у других пользователей системы - это защита от кражи ключа. На своём компьютере выставьте:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519

  • 700 на каталоге ~/.ssh - заходить и читать может только владелец.
  • 600 на приватном ключе - владелец читает и пишет, остальные никак.

На сервере те же требования к ~/.ssh (700) и ~/.ssh/authorized_keys (600). Если ключ копировали через ssh-copy-id или команду выше, права уже правильные.

Важно на стороне сервера. При настройке StrictModes yes (значение по умолчанию) sshd игнорирует ключ, если на запись группе или другим пользователям открыт хоть один из трёх объектов: домашний каталог, ~/.ssh или сам файл authorized_keys. То есть недостаточно 700 и 600 - нужно ещё, чтобы сам $HOME не был доступен на запись группе. Причина отказа видна на сервере в journalctl -u ssh строкой Authentication refused: bad ownership or modes for directory .... Лечение - на сервере через веб-консоль:

chmod go-w ~ ~/.ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Симптом нарушенных прав - сервер продолжает спрашивать пароль, хотя ключ на месте.

macOS: сохранить passphrase в связку ключей

Если вы задали passphrase на файл ключа, macOS может запомнить её в системной связке ключей (Keychain), чтобы не вводить при каждом подключении:

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

Чтобы это работало и после перезагрузки, добавьте эти строки в ~/.ssh/config - в блок Host нужного сервера, не в общий Host *:

Host myvps
HostName 203.0.113.10
User root
IdentityFile ~/.ssh/id_ed25519
AddKeysToAgent yes
IgnoreUnknown UseKeychain
UseKeychain yes

  • AddKeysToAgent yes - подгружать ключ в агент при первом использовании.
  • UseKeychain yes - брать passphrase из связки ключей.
  • IgnoreUnknown UseKeychain - должна стоять перед строкой UseKeychain.

Строки IgnoreUnknown UseKeychain и UseKeychain yes - только для macOS. На Linux параметр UseKeychain клиенту неизвестен, и без обёртки IgnoreUnknown команда ssh откажется работать по этому конфигу с ошибкой разбора. Если файл конфига используется только на Linux, строку UseKeychain не добавляйте вовсе; если один файл ходит и на Mac, и на Linux - оставьте обе строки в порядке выше.

Если сервер уже описан в ~/.ssh/config (шаг 5), не заводите второй блок - допишите три последние строки в существующий блок этого сервера.

На старых macOS (до Monterey) вместо --apple-use-keychain использовался ключ -K. На Linux passphrase на время сессии держит ssh-agent - в GNOME и KDE он обычно уже запущен, отдельная настройка не нужна.

Шаг 5. Файл ~/.ssh/config - подключение одной командой

Набирать ssh -p 2222 [email protected] каждый раз утомительно. Опишите сервер один раз в файле ~/.ssh/config на своём компьютере (если файла нет - создайте):

Host myvps
HostName 203.0.113.10
User root
Port 22
IdentityFile ~/.ssh/id_ed25519

  • Host myvps - короткое имя-псевдоним, которое вы придумываете сами.
  • HostName - настоящий IP-адрес или доменное имя сервера.
  • User - имя пользователя, под которым заходить.
  • Port - порт SSH (22 по умолчанию, можно строку не писать).
  • IdentityFile - какой приватный ключ использовать для этого сервера.

Права на файл: chmod 600 ~/.ssh/config. Теперь подключение - это просто:

ssh myvps

Псевдоним понимают и другие команды - scp, rsync, sftp. Серверов в файле может быть сколько угодно, каждый своим блоком Host.

Копирование файлов на сервер и обратно

scp копирует по SSH одним вызовом - синтаксис как у обычного cp, только у удалённой стороны перед путём стоит имя сервера и двоеточие:

scp ./archive.tar.gz myvps:/root/
scp myvps:/var/log/syslog ./

Первая строка кладёт локальный файл на сервер, вторая забирает файл с сервера в текущий каталог. Каталог целиком - с флагом -r: scp -r ./site myvps:/var/www/.

rsync удобнее для больших и повторяющихся передач: он сравнивает стороны и шлёт только изменившиеся куски.

rsync -avz ./site/ myvps:/var/www/site/

  • -a - сохранять права, время, вложенные каталоги;
  • -v - показывать, какие файлы передаются;
  • -z - сжимать данные в пути (быстрее на медленном канале).

Слэш в конце источника (./site/) означает «содержимое каталога»; без слэша скопируется сам каталог site внутрь целевого. rsync должен стоять и на сервере - на свежих образах Ubuntu и Debian он обычно уже есть, иначе apt install rsync.

Как не терять соединение

Сессия, в которой вы ничего не набираете, может тихо оборваться - промежуточное оборудование и файрволы закрывают простаивающие соединения. Чтобы клиент напоминал о себе, добавьте в ~/.ssh/config в блок Host *:

Host *
ServerAliveInterval 60
ServerAliveCountMax 3

Клиент раз в 60 секунд шлёт серверу служебный пакет. Если подряд 3 раза ответа нет (примерно через 3 минуты), соединение считается мёртвым и закрывается - вы хотя бы увидите это сразу.

Для длительных задач (перенос данных, сборка, обновление) этого мало: если оборвётся ваш интернет, процесс на сервере умрёт вместе с сессией. Запускайте такие задачи внутри tmux - это программа на сервере, которая держит сессию с командной строкой независимо от вашего подключения.

tmux

Внутри запускаете свою долгую команду. Если SSH оборвётся, переподключаетесь и возвращаетесь в ту же сессию:

tmux attach

Задача всё это время работала. Если tmux не установлен - apt install tmux на сервере.

Частые ошибки

  • Permission denied (publickey) - сервер не принял ключ, а пароль не предлагается. Причины: в команде не тот пользователь; публичный ключ не попал в ~/.ssh/authorized_keys; на сервере слишком широкие права на ~/.ssh или на домашний каталог. Проверьте на сервере через веб-консоль: ~/.ssh - 700, authorized_keys - 600, домашний каталог не доступен на запись группе. Затем повторите ssh-copy-id.
  • Permission denied (publickey,password) - к тому же не подошёл пароль либо вход по паролю на сервере выключен. Сверьте пароль в панели, при необходимости зайдите через веб-консоль.
  • Connection refused - сервер на связи, но на этом порту никто не слушает: служба sshd не запущена или SSH переведён на другой порт. Зайдите через веб-консоль, проверьте systemctl status ssh и порт в /etc/ssh/sshd_config.
  • Connection timed out - пакеты до сервера не доходят: неверный IP, сервер выключен или порт закрыт внешним файрволом. Сверьте адрес и статус сервера в панели.
  • REMOTE HOST IDENTIFICATION HAS CHANGED - ключ сервера изменился с прошлого раза. Обычная причина - переустановка ОС на этом сервере. Удалите старую запись и подключитесь заново, подтвердив новый отпечаток: ssh-keygen -R 203.0.113.10 Если ОС никто не переустанавливал, не подключайтесь, пока не разберётесь, почему сменился ключ.
  • Too many authentication failures - у вас несколько ключей, клиент предлагает их серверу по очереди, и сервер рвёт соединение, не дождавшись нужного. Укажите один ключ и запретите перебор: ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 [email protected] Либо добавьте строку IdentitiesOnly yes в блок этого сервера в ~/.ssh/config.
  • Host key verification failed - запись в ~/.ssh/known_hosts не совпала с ключом, который прислал сервер (частый спутник предыдущего сообщения про смену ключа). Разберитесь с причиной, затем удалите запись: ssh-keygen -R <адрес>.

Вопросы и ответы

Как подключиться к серверу по SSH с макбука

Откройте «Терминал» (Программы -> Утилиты, либо Spotlight по слову terminal) и введите ssh root@IP-адрес, где IP взят со страницы сервера в панели. SSH-клиент в macOS встроен, ставить ничего не нужно. При первом подключении подтвердите отпечаток словом yes и введите пароль root.

Как зайти на сервер по SSH из терминала Linux

Так же, как на Mac: команда ssh root@IP-адрес в любом терминале. Клиент OpenSSH входит во все распространённые дистрибутивы. Если команда не находится, поставьте пакет: apt install openssh-client в Debian и Ubuntu, dnf install openssh-clients в Fedora и AlmaLinux.

Где взять IP-адрес сервера

На странице сервера в панели my.weasel.cloud и в письме, которое приходит после создания сервера. Адрес выглядит как четыре числа через точку, например 203.0.113.10. Там же указаны пользователь (root) и первичный пароль.

SSH просит пароль, хотя я добавил ключ

Чаще всего сервер не нашёл ваш публичный ключ в ~/.ssh/authorized_keys или у каталога ~/.ssh на сервере слишком широкие права. Через веб-консоль выполните chmod 700 ~/.ssh и chmod 600 ~/.ssh/authorized_keys. Второй вариант - клиент берёт не тот ключ: укажите нужный явно через -i ~/.ssh/id_ed25519 или строкой IdentityFile в ~/.ssh/config.

Как сохранить подключение, чтобы не вводить всё каждый раз

Опишите сервер в файле ~/.ssh/config: блок Host с полями HostName, User, Port, IdentityFile. После этого достаточно ssh myvps. Если на ключе стоит passphrase, на macOS сохраните её в связку ключей командой ssh-add --apple-use-keychain, на Linux passphrase запомнит ssh-agent до конца сессии.

Коротко

  • IP-адрес, пользователь и пароль - на странице сервера в панели и в письме о создании.
  • Первое подключение: ssh root@IP, подтвердить отпечаток словом yes, ввести пароль, сразу сменить его через passwd.
  • Нестандартный порт - ssh -p 2222 user@host; другой пользователь - ssh deploy@host.
  • Вход по ключу: ssh-keygen -t ed25519, затем ssh-copy-id user@host. Приватный ключ никому не передаётся.
  • Права: ~/.ssh - 700, приватный ключ - 600. На macOS passphrase - в связку ключей.
  • ~/.ssh/config - псевдоним Host, дальше просто ssh myvps.
  • Файлы - scp или rsync -avz; долгие задачи - внутри tmux.

Что дальше