Введение
SSH — один из важнейших инструментов, которым должен владеть системный администратор. SSH (Secure Shell) — это протокол, используемый для безопасного входа в удалённые системы. Это наиболее распространённый способ удалённого доступа к серверам Linux. В этом руководстве мы рассмотрим, как использовать SSH для подключения к удалённой системе.
Основной синтаксис
Для подключения к удалённой системе по SSH используется команда ssh. Если вы используете Windows, вам потребуется установить версию OpenSSH, чтобы иметь возможность использовать SSH из терминала. Если вы предпочитаете работать в PowerShell, следуйте документации Microsoft по добавлению OpenSSH в PowerShell. Если вы предпочитаете иметь доступ к полноценной среде Linux, вы можете настроить WSL, подсистему Windows для Linux, которая по умолчанию включает SSH. Наконец, в качестве третьего облегчённого варианта вы можете установить Git для Windows, который предоставляет терминальную среду Windows Bash с командой ssh. Каждая из этих команд хорошо поддерживается, и выбор зависит от ваших предпочтений. Если вы используете Mac или Linux, команда ssh уже будет доступна в вашем терминале.
Простейшая форма команды:
ssh remote_hostВ этом примере remote_host — это IP-адрес или доменное имя, к которому вы хотите подключиться. Эта команда предполагает, что ваше имя пользователя в удалённой системе совпадает с вашим именем пользователя в локальной системе.
Если ваше имя пользователя в удаленной системе отличается, вы можете указать его, используя следующий синтаксис:
ssh remote_username@remote_hostПосле подключения к серверу вам может быть предложено подтвердить свою личность, введя пароль. Позже мы рассмотрим, как сгенерировать ключи для использования вместо паролей.
Чтобы выйти из ssh и вернуться в локальную оболочку, введите:
exitКак работает SSH?
SSH работает путём подключения клиентской программы к SSH-серверу, называемому sshd. В предыдущем разделе клиентской программой была ssh. SSH-сервер уже был запущен на указанном нами удалённом хосте (remote_host). Практически во всех средах Linux сервер sshd должен запускаться автоматически. Если по какой-либо причине он не запущен, вам может потребоваться временный доступ к серверу через веб-консоль или локальную последовательную консоль. Процесс запуска SSH-сервера зависит от используемого дистрибутива Linux.
В Ubuntu вы можете запустить SSH-сервер, введя:
sudo systemctl start sshЭто должно запустить sshd-сервер, после чего вы сможете войти в систему удаленно.
Как настроить SSH
При изменении конфигурации SSH изменяются настройки сервера SSH. В Ubuntu основной файл конфигурации SSH находится по адресу /etc/ssh/sshd_config. Перед редактированием сделайте резервную копию текущей версии этого файла:
sudo cp /etc/ssh/sshd_config{,.bak}Откройте его с помощью nano или вашего любимого текстового редактора:
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) удалённой системы в локальной системе. Эта опция должна быть включена на сервере и указана при подключении с опцией -X через SSH-клиент. После внесения изменений сохраните и закройте файл. Если вы используете nano, нажмите Ctrl+X, затем Y и Enter при появлении соответствующего запроса. Если вы изменили какие-либо настройки в /etc/ssh/sshd_config, обязательно перезагрузите сервер SSH, чтобы изменения вступили в силу:
sudo systemctl reload sshТщательно протестируйте внесенные изменения, чтобы убедиться, что они работают так, как вы ожидаете. Рекомендуется открыть несколько сеансов терминала во время внесения изменений. Это позволит вам при необходимости отменить настройку, не блокируя себя.
Как войти в SSH с помощью ключей
Хотя удаленный вход с использованием паролей полезен, настройка аутентификации на основе ключей быстрее и безопаснее.
Как работает аутентификация на основе ключей?
Аутентификация на основе ключей работает путём создания пары ключей: закрытого и открытого. Закрытый ключ хранится на клиентском компьютере в безопасности и секретности. Открытый ключ можно передать кому угодно или разместить на любом сервере, к которому вы хотите получить доступ. При попытке подключения с использованием пары ключей сервер использует открытый ключ для создания сообщения для клиентского компьютера, которое может быть прочитано только с помощью закрытого ключа. Затем клиентский компьютер отправляет серверу соответствующий ответ, и сервер подтверждает подлинность клиента. Этот процесс выполняется автоматически после настройки ключей.
Как создать SSH-ключи
SSH-ключи должны быть созданы на компьютере, с которого вы хотите войти. Обычно это ваш локальный компьютер.
Введите в командной строке следующее:
ssh-keygen -t rsaВас могут попросить установить пароль для самих файлов ключей, но это встречается довольно редко, и вам следует нажать Enter во время выполнения команд, чтобы принять значения по умолчанию. Ваши ключи будут созданы в файлах ~/.ssh/id_rsa.pub и ~/.ssh/id_rsa.
Перейдите в каталог .ssh, введя следующий код:
cd ~/.sshПосмотрите на права доступа к файлу:
ls -lOutput
-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 может быть общим и имеет соответствующие разрешения для этой деятельности.
Как передать открытый ключ на сервер
Если у вас в настоящее время есть доступ к серверу по паролю, вы можете скопировать на него свой открытый ключ, выполнив следующую команду:
ssh-copy-id remote_hostЭто инициирует сеанс SSH. После ввода пароля ваш открытый ключ будет скопирован в файл авторизованных ключей сервера, что позволит вам в следующий раз войти без пароля.
Параметры на стороне клиента
При подключении по SSH можно использовать ряд дополнительных команд. Некоторые из них могут потребоваться для соответствия настройкам в конфигурации SSHd удалённого хоста.
Например, если вы изменили номер порта в конфигурации sshd, вам необходимо указать этот порт на стороне клиента, введя:
ssh -p port_number remote_hostЕсли вы хотите выполнить только одну команду на удаленной системе, вы можете указать ее после хоста, например, так:
ssh remote_host command_to_runВы подключаетесь к удаленному устройству, проходите аутентификацию, и команда выполняется.
Как мы уже говорили, если на обоих компьютерах включена функция переадресации X11, вы можете получить доступ к этой функции, введя следующее:
ssh -X remote_hostЕсли на вашем компьютере установлены необходимые инструменты, программы с графическим интерфейсом, которые вы используете в удаленной системе, теперь будут открывать собственные окна в вашей локальной системе.
Отключить аутентификацию по паролю
Если вы создали SSH-ключи, вы можете повысить безопасность своего сервера, отключив аутентификацию только по паролю. Помимо консоли, единственный способ войти на сервер — использовать закрытый ключ, который связан с открытым ключом, установленным на сервере.
Как пользователь root или пользователь с привилегиями sudo откройте файл конфигурации sshd:
sudo nano /etc/ssh/sshd_configНайдите строку с надписью «Аутентификация по паролю» и удалите её, удалив начальные символы #. Затем можно изменить её значение на «no»:
PasswordAuthentication noДва других параметра, которые не нужно менять (если вы ещё не изменили этот файл), — это PubkeyAuthentication и ChallengeResponseAuthentication. Они установлены по умолчанию и должны выглядеть следующим образом:
PubkeyAuthentication yes
ChallengeResponseAuthentication noПосле внесения изменений сохраните и закройте файл.
Теперь вы можете перезагрузить демон SSH:
sudo systemctl reload sshТеперь аутентификация по паролю должна быть отключена, а доступ к вашему серверу должен осуществляться только через аутентификацию по ключу SSH.
Результат
Изучение SSH будет очень полезно для любых ваших будущих проектов в сфере облачных вычислений. По мере использования различных вариантов вы откроете для себя более продвинутые функции, которые могут облегчить вам жизнь. SSH остаётся популярным благодаря своей безопасности, лёгкости и практичности в самых разных ситуациях.









