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

Введение

Один из основных инструментов, которым должен владеть системный администратор, это SSH.

SSH, или Secure Shell, это протокол, используемый для безопасного входа на удаленные системы. Это самый распространенный способ доступа к удаленным серверам Linux.

В этом руководстве мы обсудим, как использовать SSH для подключения к удаленной системе.

Развертывайте ваши фронтенд-приложения с помощью GitHub с использованием DigitalOcean App Platform. Позвольте DigitalOcean масштабировать ваше приложение.

Основные синтаксис

Для подключения к удаленной системе с помощью SSH мы будем использовать команду ssh.

Если вы используете Windows, вам потребуется установить версию OpenSSH, чтобы иметь возможность использовать ssh из терминала. Если вы предпочитаете работать в PowerShell, вы можете следовать документации Microsoft, чтобы добавить OpenSSH в PowerShell. Если вы предпочитаете иметь полную среду Linux, вы можете настроить WSL, подсистему Windows для Linux, которая будет включать ssh по умолчанию. Наконец, как легкий третий вариант, вы можете установить Git для Windows, который предоставляет среду для терминала bash для Windows с поддержкой ssh. Каждый из этих вариантов хорошо поддерживается, и какой из них использовать, зависит от ваших предпочтений.

Если вы используете Mac или Linux, у вас уже есть команда ssh доступна в вашем терминале.

Самая простая форма команды:

  1. ssh remote_host

remote_host в этом примере – это IP-адрес или доменное имя, к которому вы пытаетесь подключиться.

Эта команда предполагает, что ваше имя пользователя на удаленной системе совпадает с вашим именем пользователя на локальной системе.

Если ваше имя пользователя отличается на удаленной системе, вы можете указать его, используя этот синтаксис:

  1. ssh remote_username@remote_host

После подключения к серверу вам может быть предложено подтвердить вашу личность, предоставив пароль. Позже мы рассмотрим, как создать ключи для использования вместо паролей.

Чтобы выйти из сеанса SSH и вернуться обратно в локальную оболочку, наберите:

  1. exit

Как работает SSH?

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

В предыдущем разделе ssh была клиентской программой. Сервер SSH уже работал на указанном нами remote_host.

Почти на всех средах Linux сервер sshd должен автоматически запускаться. Если он по какой-либо причине не запущен, вам может потребоваться временно получить доступ к серверу через веб-консоль или локальную последовательную консоль.

Процесс запуска ssh-сервера зависит от дистрибутива Linux, который вы используете.

В Ubuntu вы можете запустить ssh-сервер, набрав:

  1. sudo systemctl start ssh

Это должно запустить сервер sshd, и вы сможете удаленно войти в систему.

Как настроить SSH

Изменяя конфигурацию SSH, вы изменяете настройки сервера sshd.

В Ubuntu основной конфигурационный файл sshd расположен в /etc/ssh/sshd_config.

Сделайте резервную копию текущей версии этого файла перед редактированием:

  1. sudo cp /etc/ssh/sshd_config{,.bak}

Откройте его с помощью nano или вашего любимого текстового редактора:

  1. sudo nano /etc/ssh/sshd_config

Вам захочется оставить большую часть параметров в этом файле без изменений. Однако есть несколько, на которые стоит обратить внимание:

/etc/ssh/sshd_config
Port 22

Объявление порта указывает, на каком порту сервер sshd будет слушать соединения. По умолчанию это 22. Вероятно, вам следует оставить этот параметр без изменений, если у вас нет конкретных причин сделать иначе. Если вы измените порт, мы покажем вам, как подключиться к новому порту позже.

/etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

Объявления ключей хоста указывают, где искать глобальные ключи хоста. Мы обсудим, что такое ключ хоста позже.

/etc/ssh/sshd_config
SyslogFacility AUTH
LogLevel INFO

Эти два элемента указывают уровень ведения журнала, который должен происходить.

Если у вас возникают сложности с SSH, увеличение объема журналирования может быть хорошим способом выяснить, в чем проблема.

/etc/ssh/sshd_config
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

Эти параметры указывают некоторую информацию для входа.

LoginGraceTime указывает, сколько секунд сохранять соединение активным без успешного входа в систему.

Возможно, будет разумно установить это время чуть выше, чем время, необходимое вам для обычного входа в систему.

PermitRootLogin выбирает, разрешено ли пользователю root входить в систему.

В большинстве случаев это должно быть изменено на no, когда вы создали учетную запись пользователя, которая имеет доступ к повышенным привилегиям (через su или sudo) и может входить в систему через SSH, чтобы минимизировать риск получения кем-либо прав доступа root к вашему серверу.

strictModes – это защита, которая отклонит попытку входа, если файлы аутентификации доступны для чтения всем.

Это предотвращает попытки входа, когда конфигурационные файлы не защищены.

/etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10

Эти параметры настраивают возможность, называемую X11 Forwarding. Это позволяет просматривать графический интерфейс удаленной системы на локальной системе.

Эта опция должна быть включена на сервере и указана в SSH-клиенте во время подключения с помощью опции -X.

После внесения изменений сохраните и закройте файл. Если вы используете nano, нажмите Ctrl+X, затем, когда будет предложено, нажмите Y, а затем Enter.

Если вы изменили какие-либо параметры в файле /etc/ssh/sshd_config, убедитесь, что перезагрузили ваш сервер sshd, чтобы применить изменения:

  1. sudo systemctl reload ssh

Вы должны тщательно протестировать ваши изменения, чтобы убедиться, что они работают так, как вы ожидаете.

Будет хорошей идеей иметь несколько терминальных сессий открытыми во время внесения изменений. Это позволит вам откатить конфигурацию при необходимости, не заблокировав себя.

Как войти в SSH с помощью ключей

Хотя удобно входить на удаленную систему, используя пароли, быстрее и безопаснее настроить аутентификацию на основе ключей.

Как работает аутентификация на основе ключей?

Аутентификация на основе ключей работает путем создания пары ключей: закрытого ключа и открытого ключа.

Закрытый ключ находится на клиентском компьютере и является защищенным и хранится в секрете.

Открытый ключ может быть передан кому угодно или помещен на любой сервер, к которому вы хотите получить доступ.

Когда вы пытаетесь подключиться, используя пару ключей, сервер использует открытый ключ для создания сообщения для компьютера клиента, которое может быть прочитано только с помощью закрытого ключа.

Клиентский компьютер затем отправляет соответствующий ответ на сервер, и сервер узнает, что клиент является подлинным.

Этот процесс выполняется автоматически после настройки ваших ключей.

Как создать SSH-ключи

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

Введите следующее в командной строке:

  1. ssh-keygen -t rsa

Возможно, вам будет предложено установить пароль на сами ключевые файлы, но это довольно редкая практика, и вам следует нажать Enter во время запросов, чтобы принять значения по умолчанию. Ваши ключи будут созданы в ~/.ssh/id_rsa.pub и ~/.ssh/id_rsa.

Перейдите в каталог .ssh, набрав:

  1. cd ~/.ssh

Посмотрите на разрешения файлов:

  1. ls -l
Output
-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys -rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa -rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub

Как видите, файл id_rsa доступен только для чтения и записи владельцу. Это помогает сохранить его в секрете.

Файл id_rsa.pub, однако, можно передавать, и у него разрешения, соответствующие этой операции.

Как передать ваш открытый ключ на сервер

Если у вас сейчас есть доступ к серверу по паролю, вы можете скопировать ваш открытый ключ на него, выполнив эту команду:

  1. ssh-copy-id remote_host

Это запустит сеанс SSH. После ввода пароля он скопирует ваш открытый ключ в файл авторизованных ключей сервера, что позволит вам войти без пароля в следующий раз.

Клиентские опции

При подключении через SSH вы можете использовать несколько необязательных флагов.

Некоторые из них могут быть необходимы для сопоставления параметров в конфигурации sshd удаленного хоста.

Например, если вы изменили номер порта в своей конфигурации sshd, вам нужно будет сопоставить этот порт с клиентской стороны, набрав:

  1. ssh -p port_number remote_host

Примечание: Изменение порта SSH – разумный способ обеспечения безопасности через неявность. Если вы разрешаете подключения SSH к широко известному серверу на порту 22 как обычно и включили аутентификацию по паролю, вас, вероятно, будут атаковать множественные попытки входа в систему. Использование только аутентификации на основе ключей и запуск SSH на нестандартном порту не является самым сложным методом обеспечения безопасности, который вы можете использовать, но должно свести их к минимуму.

Если вы хотите выполнить только одну команду на удаленной системе, вы можете указать ее после имени хоста следующим образом:

  1. ssh remote_host command_to_run

Вы подключитесь к удаленной машине, произведете аутентификацию, и команда будет выполнена.

Как мы уже говорили ранее, если пересылка X11 включена на обоих компьютерах, вы можете получить доступ к этой функциональности, набрав:

  1. ssh -X remote_host

При наличии необходимых инструментов на вашем компьютере, GUI-программы, которые вы используете на удаленной системе, теперь будут открывать свое окно на вашей локальной системе.

Отключение аутентификации по паролю

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

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

Как root или пользователь с правами sudo, откройте файл конфигурации sshd:

  1. sudo nano /etc/ssh/sshd_config

Найдите строку, содержащую Password Authentication, и раскомментируйте её, удалив начальный #. Затем измените её значение на no:

/etc/ssh/sshd_config
PasswordAuthentication no

Ещё два параметра, которые обычно не требуют изменений (предполагается, что вы ранее не изменяли этот файл), — это PubkeyAuthentication и ChallengeResponseAuthentication. Они установлены по умолчанию и должны выглядеть следующим образом:

/etc/ssh/sshd_config
PubkeyAuthentication yes
ChallengeResponseAuthentication no

После внесения изменений сохраните и закройте файл.

Теперь вы можете перезагрузить демон SSH:

  1. sudo systemctl reload ssh

Аутентификация по паролю теперь должна быть отключена, и доступ к вашему серверу должен быть доступен только через аутентификацию по SSH-ключам.

Заключение

Изучение работы с SSH значительно облегчит ваши будущие облачные вычисления. Используя различные параметры, вы обнаружите более продвинутые функции, которые могут упростить вашу жизнь. SSH остается популярным из-за своей безопасности, легкости и полезности в различных ситуациях.

Затем вы можете захотеть изучить работу с SFTP, чтобы выполнять передачу файлов через командную строку.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server