Как подключиться к VPS по SSH: просто, безопасно и без лишней магии
SSH — базовый инструмент для работы с сервером, но для новичков он часто выглядит пугающе: терминал, ключи, странные ошибки при подключении. В этой статье разбираем SSH на практике — как подключаться с macOS, Linux и Windows, зачем нужны SSH-ключи, как передавать файлы и что делать, если соединение не устанавливается.
SSH — это способ удалённого доступа, который шифрует всё соединение целиком: команды, пароли, передаваемые файлы. Через SSH можно не только выполнять команды, но и копировать файлы, настраивать сервисы, перезапускать службы, работать с логами и автоматизировать рутинные задачи. Один инструмент даёт полный контроль над сервером, независимо от того, где вы находитесь: в офисе, дома или с ноутбуком в дороге.
Для подключения к серверу по SSH нужны три вещи — программа для подключения, адрес сервера и учётные данные подключаемого пользователя.
На виртуальных серверах RUVDS SSH-доступ доступен сразу после создания VPS — все учётные данные и IP-адрес можно найти в личном кабинете, поэтому к работе с сервером можно приступить буквально за пару минут.
Основными приложениями для SSH являются терминал в macOS и Linux и командная строка Windows. В обоих платформах данный инструмент является дефолтным, правда, в Windows он присутствует по умолчанию только начиная с Windows 10, но и в более старых версиях отсутствие встроенного SSH легко обойти — об этом чуть ниже. Адрес же сервера, то есть, его IP-адрес, как и учётные данные пользователя (логин и пароль), указаны на страничке сервера в личном кабинете хостинга — они выдаются при создании виртуальной машины.
Как подключиться из macOS и Linux
Чтобы подключиться из macOS или Linux, достаточно открыть терминал ввести команду:
ssh имя_пользователя@адрес_сервера
В данном случае:
- ssh — консольная команда, использующая протокол SSH;
- имя_пользователя — имя пользователя на удалённом сервере;
- адрес_сервера — IP-адрес удалённого сервера.
При первом подключении в качестве пользователя используйте учётную запись root. Его пароль указан на страничке сервера.
При этом хорошим тоном является создание собственного пользователя, позволяющего не использовать root. Здесь действует принцип наименьших привилегий — давать минимум прав, необходимых для выполнения задач. К тому же доступ для пользователя root лучше закрыть, поскольку он обладает полными правами в системе, и первое, что пытаются подобрать боты при атаках по SSH — это именно его пароль. Если злоумышленник угадает пароль root, то сервер окажется под полным его контролем.
Кроме того, при первом подключении необходимо будет подтвердить публичный ключ хоста, чтобы сохранить отпечаток. Дело в том, что каждый SSH-сервер имеет свой уникальный публичный и приватный ключ: приватный ключ остаётся на сервере и никогда не покидает его, а публичный ключ используется для проверки — действительно ли вы подключаетесь к своему серверу, а не к злоумышленнику. Когда вы впервые подключаетесь к серверу, ваш клиент не знает его ключ. Поэтому при первом подключении SSH-клиент просит подтвердить подлинность сервера для того, чтобы убедиться, что сервер — именно тот, за кого себя выдаёт.
Затем SSH-клиент сохраняет отпечаток ключа в файле ~/.ssh/known_hosts, и в дальнейшем будет автоматически сверять ключ сервера с сохранённым отпечатком. Если ключ изменится, например, если сервер был скомпрометирован или переустановлен, то SSH-клиент выдаст предупреждение.
Как подключиться из Windows
В Windows тоже есть встроенный SSH-клиент, и подключение из командной строки выглядит точно так же, как и в Linux или macOS. Но, как мы уже говорили, встроен SSH-клиент в систему только начиная с Windows 10. На Windows 7 и на более ранних версиях, где нет встроенного SSH, наибольшей популярностью пользуется такое приложение, как PuTTY. Эта программа по-настоящему проверена временем: её разработка началась ещё в далёком 1996-м и предназначался данный софт именно для подключения к удалённым и локальным машинам по SSH, Telnet и через COM-порт. Поскольку PuTTY уже немало лет, выглядит он и в самом деле, как программа для Windows 98, но при этом он нисколько не утратил своей актуальности и по-прежнему остаётся надёжным инструментом для работы с серверами. Что касается подключения по SSH, то делать это через PuTTY так же просто, как и в командной строке: вводим IP-адрес сервера в поле Host Name и жмём Open.
После чего приложение откроет окно терминала, где нужно будет ввести логин и пароль. Собственно, и всё.
PuTTY удобнее, чем командная строка, в тех случаях, когда нужна гибкая и наглядная настройка SSH-подключения, а не просто разовый вход на сервер. Например, PuTTY позволяет сохранить сеанс, что удобно при частом подключении к одним и тем же виртуалкам.
Как подключиться с использованием SSH-ключей
В SSH есть способ аутентификации, когда при подключении к серверу не нужно вводить пароль. Вместо пароля используется пара криптографических ключей: закрытый и открытый. Закрытый ключ хранится только у пользователя и никогда не передаётся по сети, а открытый размещается на сервере. Когда вы подключаетесь к серверу, он проверяет, действительно ли клиент владеет соответствующим закрытым ключом, и только после этого разрешает доступ. Идея в том, что безопасность строится не на знании секрета, как в случае с паролем, а на владении закрытым ключом. Даже если трафик будет перехвачен, извлечь из него закрытый ключ невозможно. За счёт этого SSH-ключи считаются значительно более надёжными, чем обычные пароли, особенно на серверах, доступных из интернета.
Чтобы начать использовать SSH-ключи вместо пароля, сначала нужно их создать. Для этого открываем терминал на своём компьютере и запускаем команду:
ssh-keygen -t rsa -b 4096
Данная команда применяет алгоритм шифрования RSA (Rivest–Shamir–Adleman) — один из самых распространённых и надёжных алгоритмов асимметричной криптографии, и задаёт длину ключа в 4096 бит. В результате выполнения команды в каталоге ~/.ssh/ будут созданы два файла:
- файл открытого ключа id_rsa.pub, который можно безопасно передать для размещения на сервере;
- и файл закрытого ключа id_rsa, который, напротив, нужно хранить в очень надёжном месте, исключив возможность его передачи кому бы то ни было.
Обычно закрытый ключ дополнительно защищают паролем, так называемым passphrase. Это ещё один уровень защиты. Если файл ключа украдут, без этого пароля использовать его будет нельзя.
Далее подключаемся к серверу по SSH и в своей домашней папке создаём каталог .ssh:
mkdir -p ~/.ssh
Переходим в созданный каталог:
cd ~/.ssh
И там создаём файл authorized_keys:
nano authorized_keys
В этот файл нужно скопировать содержимое id_rsa.pub — файла открытого ключа, созданного чуть ранее.
Закрываем файл с сохранением внесённых изменений, и пробуем подключиться к удалённой машине. С этого момента серверу уже должно быть известно, каким ключам он может доверять. При подключении SSH-клиент доказывает серверу, что у него есть соответствующий закрытый ключ, и вход происходит автоматически.
Как передавать файлы через SSH
Через SSH можно не только запускать команды, но и передавать файлы на удалённый сервер и, наоборот, получать файлы с сервера. Делать это можно двумя способами. Первый — SCP (Secure Copy) —утилита для безопасного копирования файлов и каталогов через сеть поверх SSH. По умолчанию SCP использует тот же порт, что и SSH, и тоже шифрует данные при передаче. Например, следующая команда скопирует файл с локального компьютера в домашний каталог пользователя на удалённом сервере:
scp file.txt your-user@X.X.X.X:/home/your-user/
А так можно скопировать на сервер каталог целиком:
scp -r /path/to/local-dir/ your-user@X.X.X.X:/home/your-user/
Если вы используете SSH-ключи для подключения к серверу, то копировать файлы и каталоги на удалённую машину можно также с их помощью:
scp -i ~/.ssh/id_rsa /path/to/local-dir/file.txt your-user@X.X.X.X:/home/your-user/
В обратную сторону, то есть с удалённого сервера на локальный компьютер, копировать тоже можно:
scp your-user@X.X.X.X:/home/your-user/file.txt /path/to/local-dir/
Ещё один способ передачи файлов на Linux-сервер — это SFTP (SSH File Transfer Protocol). SFTP является протоколом передачи файлов, который, как и SCP, работает поверх SSH. Работа с SFTP обычно представляет собой подключение к серверу и последующее интерактивное управление файлами с помощью набора команд.
Для подключения к серверу нужна команда, в которой указывается имя пользователя и IP-адрес сервера:
sftp your-user@X.X.X.X
Основные команды внутри SFTP:
- ls — вывести список файлов на сервере;
- pwd — вывести текущий каталог на сервере;
- lpwd — показать текущий локальный каталог;
- cd — перейти в каталог на сервере;
- lcd — перейти в каталог на локальном компьютере;
- get file — скачать файл с удалённого сервера;
- put file — загрузить файл на удалённый сервер;
- get -r dir — скачать каталог с удалённого сервера;
- put -r dir — загрузить каталог на удалённый сервер.
Если вы предпочитаете использовать софт с графической оболочкой, то и SCP, и SFTP обладают клиентами соответствующих версий — WinSCp и FileZilla. Более того, если WinSCp — это продукт исключительно для Windows, то FileZilla распространяется также для macOS и Linux.
Оба эти приложения выглядят как привычный файловый командер с возможностью подключения к удалённой Linux-системе. Причём WinSCp умеет соединяться по обоим протоколам.
В FileZilla всё также достаточно просто — вводим адрес подключения и имя пользователя, после чего приложение просит набрать пароль и соединяется с удалённым сервером.
Что делать, если подключиться не получается?
Случается всякое, поэтому давайте обсудим наиболее типичные проблемы и способы их устранения. Например, после ввода пароля система на пару секунд берёт паузу и потом отвечает Permission denied, please try again. Явно что-то не так с паролем или именем пользователя. Убедитесь, что набираете или вставляете верный пароль. Посмотрите внимательнее, правильно ли указано имя учётной записи. А IP-адрес сервера прописан без ошибок? И если вы подключаетесь пользователем root, то не закрыт ли доступ для него в настройках SSH?
Если же до пароля даже не доходит, и подключение просто «висит» и соединения не происходит, а после продолжительной паузы появляется сообщение вида ssh: connect to host X.X.X.X port 22: Connection timed out, то, вероятно вы активировали брандмауэр, но не добавили в него правило, разрешающее доступ по SSH.
В таком случае придётся подключаться к серверу через консоль аварийного доступа и либо отключать брандмауэр, либо добавлять в него правило для SSH.
Кстати, для подключения к серверу в режиме аварийного доступа кликните на значок экрана виртуалки на её страничке.
Ещё одной распространённой причиной невозможности подключения по SSH является изменение host-ключа сервера, при том что на локальном компьютере сохранён его старый ключ для данного IP-адреса.
Как правило, такая ситуация возникает после переустановки операционной системы на VPS. Поскольку на локальной машине остаётся сохранённый ранее ключ, SSH воспринимает расхождение как потенциальную угрозу и блокирует подключение. Такое поведение является штатным механизмом защиты от MITM-атак.
В этом случае, если переустановка сервера действительно проводилась, рекомендуется удалить устаревший ключ автоматически, например в PowerShell или командной строке:
ssh-keygen -R X.X.X.X
После этого можно повторить подключение — SSH отобразит новый fingerprint и запросит подтверждение, на которое следует ответить yes.
Также допускается ручное удаление строки, соответствующей IP-адресу сервера, из файла ~/.ssh/known_hosts. Путь к файлу может отличаться в зависимости от операционной системы на вашем компьютере.
При этом категорически не рекомендуется удалять сохранённый host-ключ, если на сервере не выполнялась переустановка системы и изменение ключа произошло без видимых причин.
Заключение
SSH — простой, надёжный и универсальный способ удалённого управления виртуальной машиной. Он обеспечивает защищённое соединение, шифруя передаваемые данные, и позволяет выполнять администрирование системы из любой точки, в которой доступен интернет. Фактически SSH давно уже стал стандартом для удалённого доступа к Linux-системам. Он постоянно используется при работе с сетевым оборудованием и облачной инфраструктурой и при этом не требует дополнительной установки.
💻 Виртуальные серверы по цене от 139 рублей в месяц заказывайте на сайте RUVDS. Первые 3 дня пользуйтесь VPS бесплатно!