Что такое SSH?
SSH – один из важнейших инструментов системного администрирования.
SSH, или Secure Shell (безопасная оболочка) – это протокол, который используется для безопасного подключения к удаленным системам. Это самый распространенный способ подключения к удаленным Linux- и Unix-подобным серверам (например, к VPS).
В данном руководстве речь пойдет об использовании SSH для подключения к удаленной системе.
Базовый синтаксис
Для подключения к удаленной системе с помощью SSH в Linux существует одноименный инструмент – ssh.
Базовый вид команды:
ssh удаленный_хост
В данном примере фраза «удаленный_хост» заменяет IP-адрес или доменное имя хоста, к которому нужно подключиться.
Эта команда предполагает, что имя пользователя на удаленной и локальной системах совпадают.
Если же на удаленной системе установлено другое имя пользователя, его нужно указать с помощью следующего синтаксиса:
ssh имя_пользователя@удаленный_хост
После подключения к серверу необходимо указать пароль, чтобы пройти авторизацию.
Процедура создания ключей, которые можно использовать вместо пароля, будет описана позже.
Чтобы вернуться в локальную сессию, просто наберите:
exit
Как работает SSH?
SSH работает путем подключения клиентской программы к серверу ssh.
В приведенных выше командах ssh является клиентской программой. Сервер ssh уже запущен на указанном удаленном хосте.
Если сервер ssh еще не запущен на VPS, нажмите кнопку «Console Access», которая находится на странице сервера. Это выведет экран авторизации. Для входа используйте свои учетные данные.
В целом, процесс запуска сервера ssh зависит от используемого дистрибутива Linux.
В Ubuntu для запуска сервера ssh на VPS нужно ввести:
sudo service sshd start
Настройка SSH
При изменении настроек SSH изменяются и настройки ssh-сервера.
В Ubuntu главный конфигурационный файл SSH находится в /etc/ssh/sshd_config.
Создайте резервную копию текущей версии этого файла перед его редактированием:
sudo cp /etc/ssh/sshd_config{,.bak}
Откройте его с помощью текстового редактора:
sudo nano /etc/ssh/sshd_config
Некоторые настройки требуют особенного внимания, например:
Port 22
Данная строка определяет, какой порт ssh-сервер будет прослушивать для соединений. По умолчанию это порт 22.
Желательно использовать нестандартный порт, чтобы защитить сервер от случайных сканирований портов. Позже будет показано, как подключиться к новому порту.
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
Строки HostKey указывают, где находятся ключи хоста (подробнее о ключах хоста позже).
SyslogFacility
LogLevel INFO
Данные строки содержат настройки журналирования и определяют уровень журнала.
При возникновении каких-либо проблем с SSH рекомендуется повысить уровень журнала (что увеличивает количество записываемых данных).
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
Данные параметры содержат некоторую регистрационную информацию.
LoginGraceTime указывает количество секунд, на протяжении которых необходимо поддерживать соединение без авторизации.
Примечание: в данной строке установите немного больше времени, чем обычно необходимо для регистрации.
PermitRootLogin определяет возможность входа в систему как пользователь root.
В большинстве случаев после создания пользователя, имеющего повышенные привилегии (su или sudo) и возможность подключаться через ssh, в данной строке рекомендуется установить «no»
strictModes – это защитное устройство, которое откажет во входе, если файлы аутентификации доступны для чтения всем.
Это предотвращает попытки входа, если файлы конфигурации не защищены.
X11Forwarding yes
X11DisplayOffset 10
Данные параметры настраивают функцию под названием X11 Forwarding, что позволяет просматривать графический пользовательский интерфейс (GUI) удаленной системы на локальной системе.
Этот параметр должен быть активирован и на локальной, и на удаленной машине; для использования функции необходимо передать клиента и опцию –X.
Отредактировав данный файл, не забудьте перезапустить ssh-сервер, чтобы активировать внесенные изменения:
sudo service sshd restart
Кроме того, внесенные изменения необходимо тщательно протестировать, чтобы убедиться, что все работает должным образом.
Рекомендуется открыть несколько сессий при внесении изменений. Это позволит вернуть конфигурации в случае необходимости.
Столкнувшись с проблемами, помните, что войти можно также с помощью кнопки «Console Access».
Вход с помощью ключей SSH
Зачастую аутентификация на основе ключей намного надежнее, чем вход в удаленную систему при помощи пароля.
Как работает аутентификация на основе ключей?
Аутентификация на основе ключей подразумевает создание пары ключей – закрытого и открытого.
Закрытый ключ находится на клиентской машине, должен быть защищен и храниться в секрете.
Открытый ключ можно давать кому угодно и разместить на любом сервере, к которому нужно получить доступ.
При попытке подключиться с помощью пары ключей сервер использует открытый ключ, чтобы создать сообщение для клиентского компьютера, которое можно прочитать только с помощью закрытого ключа.
Затем клиентский компьютер посылает серверу соответствующий ответ, благодаря чему сервер понимает, что клиент является законным.
После настройки ключей весь этот процесс осуществляется автоматически в фоновом режиме.
Создание SSH-ключей
SSH-ключи нужно создать на компьютере, с которого нужно установить подключение (как правило, это локальный компьютер).
В командной строке наберите:
ssh-keygen -t rsa
Чтобы принять настройки по умолчанию, нажмите Enter. Ключи будут созданы в ~/.ssh/id_rsa.pub и ~/.ssh/id_rsa.
Перейдите в каталог .ssh, набрав:
cd ~/.ssh
Обратите внимание на права на файлы:
ls -l
-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 удаленный_хост
Это откроет сессию SSH, для входа в которую нужно ввести пароль.
После введения пароля открытый ключ будет скопирован на сервер, что позволит в следующий раз войти в систему без пароля.
Клиентские настройки SSH
При подключении по SSH можно использовать ряд флагов.
Некоторые из них нужны для установки соответствующих параметров в файле ssh удаленного хоста.
Например, если номер порта в конфигурациях ssh на локальном хосте был изменен, нужно установить соответствующий порт на стороне клиента, набрав:
ssh -p номер_порта удаленный_хост
Если на удаленной системе нужно выполнить какую-либо команду, ее можно указать следующим образом:
ssh удаленный_хост нужная_команда
Эта строка установит соединение с удаленной машиной и выполнит указанную команду.
Как уже было сказано, если функция X11 forwarding активирована на обоих компьютерах, ее можно использовать, набрав:
ssh -X удаленный_хост
При наличии на локальной системе всех соответствующих инструментов программы с графическим интерфейсом, используемые на удаленной системе, откроются на локальном компьютере.
Итоги
Научиться работать с SSH очень важно хотя бы потому, что это необходимо для выполнения самых базовых задач.
Постоянно используя SSH, можно не только защитить сервер, но и стать продвинутым пользователем, что значительно упростит жизнь. Протокол SSH остается популярным, потому что он безопасен, надежен и полезен в различных ситуациях.