Поиск по сайту:

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


Введение

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

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

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

Основной синтаксис

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

Если вы используете Windows, вам необходимо установить версию OpenSSH, чтобы иметь возможность использовать ssh с терминала. Если вы предпочитаете работать в PowerShell, вы можете использовать Git для Windows, который предоставляет родную среду терминала Windows bash, включающую команду 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

Вы захотите оставить большинство опций в этом файле в покое. Тем не менее, есть несколько, на которые вы можете взглянуть:

Port 22

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

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

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

SyslogFacility AUTH
LogLevel INFO

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

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

LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

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

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

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

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

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

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

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

X11Forwarding yes
X11DisplayOffset 10

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

Эта опция должна быть включена на сервере и задана клиентом 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

Вам может быть предложено установить пароль для самих файлов ключей, но это довольно редкая практика, и вам следует нажать клавишу ввода в подсказках, чтобы принять значения по умолчанию. Ваши ключи будут созданы в ~/.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

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

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

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

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

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

  1. sudo nano /etc/ssh/sshd_config

Найдите строку с надписью Аутентификация по паролю и раскомментируйте ее, удалив начальный #. Затем вы можете изменить его значение на no:

PasswordAuthentication no

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

PubkeyAuthentication yes
ChallengeResponseAuthentication no

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

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

  1. sudo systemctl reload ssh

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

Заключение

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

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