Secure Shell (SSH) — это сетевой протокол, который используется для безопасного соединения между клиентом и сервером. Каждое взаимодействие шифруется. Это позволяет безопасно управлять хостом, передавать файлы и решать другие задачи.
Например, вы заказали сервер на timeweb.cloud и хотите управлять им в том числе со своего ноутбука. Для этого достаточно настроить доступ по SSH. Через защищенное соединение вы сможете выполнять все необходимые действия по администрированию.
Для успешной настройки вам необходимо:
По умолчанию удаленный доступ через защищенный сетевой протокол запрещен. Однако установка SSH в Ubuntu выполняется очень просто.
Запустите консоль сервера, на котором требуется настройка SSH в Ubuntu.
Обновите пакетный менеджер.
sudo apt update
Установите необходимое ПО:
sudo apt install openssh-server
Обратите внимание — для выполнения обеих операций требуются права суперпользователя, которые вы получаете с помощью sudo.
OpenSSH Ubuntu запускается автоматически после установки. Но вы можете проверить его статус, используя команду:
sudo systemctl status ssh
В выводе должно быть указано, что служба запущена и разрешена для запуска при загрузке системы:
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-03-21 12:34:00 CEST; 1m ago
...
Это значит, что команда Install SSH Ubuntu выполнена успешно. Чтобы вернуться в командную строку, нажмите клавишу q
.
Если служба не активна, запустите ее вручную с помощью команды:
sudo systemctl enable --now ssh
Ubuntu поставляется с инструментом настройки брандмауэра под названием UFW. Если в вашей системе включен брандмауэр, обязательно откройте порт SSH:
sudo ufw allow ssh
Теперь вы можете подключиться к вашей системе Ubuntu через SSH с любого удаленного компьютера.
Чтобы сделать соединение еще более безопасным, а аутентификацию — удобной, используют пару ключей: открытый и закрытый. Открытый хранится на хосте, закрытый — на компьютере пользователя.
Посмотрим, как создавать ключи в разных ОС. Начнем с Ubuntu.
Чтобы сгенерировать новую пару 2048-битных ключей RSA, откройте терминал и выполните приведенную ниже команду:
ssh-keygen -t rsa
Появится вопрос, куда сохранить ключи. Если вы нажмете Enter, по умолчанию пара ключей будет сохранена в подкаталоге .ssh папки home. Вы также можете указать альтернативный путь, где вы хотите сохранить пару ключей. Но рекомендуется использовать каталог по умолчанию. Это заметно упрощает дальнейшее управление.
Если вы уже создали пару ключей на клиентском компьютере, вам будет предложено перезаписать ее. Выбор полностью зависит от вас, но будьте осторожны. Если вы выберете перезапись, то не сможете использовать предыдущую пару ключей для входа на сервер. Она будет удалена. Исправить конфликт легко — достаточно указывать для каждой новой пары уникальное имя. Папка для хранения при этом может оставаться одной и той же.
Вам также предложат ввести парольную фразу, чтобы добавить дополнительный уровень безопасности, который предотвращает доступ неавторизованных пользователей к хосту. Просто нажмите Enter, если вы не хотите вводить парольную фразу.
Чтобы убедиться в том, что ключи созданы, выполните команду:
ls -l ~/.ssh/id_*.pub
В терминале отобразится список ключей.
Аналогичным образом можно сгенерировать пару на macOS.
Если вы пользуетесь Windows, то проще скачать набор утилит PuTTY. В нем есть приложение PuTTYgen. Чтобы создать с его помощью пару ключей, достаточно провести мышкой. В PuTTYgen тоже можно выбрать папку для хранения ключей и добавить парольную фразу для максимальной защиты.
Закрытый ключ хранится на компьютере. Его нельзя никому передавать. А вот открытую часть необходимо перенести на сервер.
Если у вас есть доступ к хосту по паролю, можно перенести открытый ключ с помощью ssh-copy-id. Пример команды:
ssh-copy-id timeweb@192.168.18.76
Вместо ‘timeweb’ введите свое имя пользователя, вместо ‘192.168.18.76’ — IP-адрес сервера. В ответ появится запрос пароля. Введите его, после чего открытая часть отправится на хост.
Чтобы подключиться с помощью ключей, выполните команду:
ssh timeweb@192.168.18.76.
Вместо ‘timeweb’ введите свое имя пользователя, вместо ‘192.168.18.76’ — IP-адрес сервера. Если вы не установили парольную фразу, вы можете войти в систему без дополнительной аутентификации. Система защиты проверит открытую и закрытую части ключа и при совпадении установит соединение.
vds
Настройка Ubuntu Server выполняется через файл /etc/ssh/sshd_config. Но прежде чем вносить в него изменения, сделайте резервную копию. Это убережет вас от потери времени на переустановку, если вдруг совершите ошибку.
Чтобы сделать копию, выполните команду:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
В /etc/ssh/sshd_config.factory-defaults сохранятся стандартные параметры. Вы же будете редактировать файл /etc/ssh/sshd_config.
Аутентификация по паролю на SSH Server Ubuntu — это неплохо. Но создание длинного и сложного пароля также может подтолкнуть вас к его незащищенному хранению. Использование ключей шифрования для аутентификации соединения является более безопасной альтернативой. В таком случае пароль может оказаться ненужным. В целях повышения безопасности рекомендуется его отключать.
Прежде чем продолжить, имейте в виду следующее:
Вы должны отключать аутентификацию по паролю только в том случае, если вы очень хорошо знакомы с механизмом аутентификации с помощью ключей и понимаете потенциальные последствия блокировки доступа.
Чтобы отключить аутентификацию по паролю, подключитесь к серверу с правами root и отредактируйте файл sshd_config. Откройте его и измените параметр PasswordAuthentication. Вместо ‘Yes’ установите значение ‘No’.
После внесения этого изменения перезапустите службу SSH, выполнив следующую команду от имени пользователя root:
sudo systemctl restart sshd
После этого исчезнет возможность использовать для аутентификации пароли. Подключиться можно будет только с помощью ключей SSH Linux.
Чтобы улучшить безопасность в вашей удаленной системе Ubuntu, рассмотрите возможность отключения входа пользователя root по ssh.
В Ubuntu на удаленном хосте отредактируйте файл конфигурации и установите параметр, чтобы отключить root-доступ через SSH.
Откройте файл Ubuntu SSH config для редактирования:
sudo vi /etc/ssh/sshd_config
Измените значение PermitRootLogin на ‘No’.
Существует также возможность разрешить аутентификацию пользователя root с помощью любого другого разрешенного механизма, кроме пароля. Для этого установите параметру PermitRootLogin значение ‘prohibit-password’.
С приведенной выше конфигурацией вы сможете войти в систему как пользователь root с закрытым ключом. Главное, чтобы открытый ключ был скопирован в систему до перезапуска службы SSH-сервера.
Чтобы применить обновленную конфигурацию sshd permitrootlogin, перезапустите службу:
sudo systemctl restart sshd
По умолчанию Open Server Ubuntu использует 22 порт. Чтобы повысить безопасность, вы можете установить любое другое значение. Рекомендуется использовать порты из верхнего диапазона — от 50000 до 65000. Желательно подбирать номера, в которых все цифры отличаются, например 56713.
Откройте файл конфигурации:
sudo vi /etc/ssh/sshd_config
Раскомментируйте строку ‘Port 22’. Вместо 22 укажите другой номер — например, ‘Port 56713’. Сохраните изменения и закройте файл.
Чтобы применить конфигурацию, перезапустите службу:
sudo systemctl restart sshd
После успешного перезапуска убедитесь, что теперь подключение проходит по другому порту:
ssh -p 56713 user@ip_server
Не забывайте после каждого изменения перезапускать службу. Иначе подключение по SSH в Linux будет проходить по старым правилам.
Туннелирование — это способ передачи незашифрованного трафика или данных по зашифрованному каналу. Помимо передачи файлов, туннелирование также можно использовать для доступа к службам внутренней сети через брандмауэры.
Есть три типа туннелирования (переадресации):
Для настройки некоторых типов придется редактировать файл configure SSH.
Это переадресация порта с клиентского компьютера на удаленный. Затем соединение перенаправляется на другой порт целевого компьютера.
SSH-клиент проверяет наличие соединения на заданном порту. Когда он получает запрос на подключение, то туннелирует его с заданным портом на удаленном хосте. Затем хост подключается к другому целевому компьютеру через настроенный порт.
В основном локальный проброс используют для внешнего подключения к службе из внутренней сети. Например, так можно настроить доступ к базе данных. Он также используется для удаленного обмена файлами.
Для локальной переадресации используется аргумент -L. Пример команды:
ssh timeweb@server.example -L 8080:server1.example:3000
Теперь откройте браузер на локальном компьютере. Вы можете использовать localhost:8080 для доступа к удаленному приложению вместо доступа к нему с использованием адреса server.example:3000.
Удаленная переадресация позволяет подключаться к локальному компьютеру с удаленного. SSH по умолчанию не поддерживает перенаправление удаленных портов. Поэтому вам нужно включить его в файле конфигурации SSH. Для этого потребуется дополнительная настройка сервера Ubuntu.
Откройте файл конфигурации:
sudo vi /etc/ssh/sshd_config
Установите для параметра GatewayPorts значение ‘Yes’.
Сохраните изменения и перезапустите службу:
sudo systemctl restart sshd
Для настройки переадресации используйте аргумент -R. Пример команды:
ssh -R 8080:127.0.0.1:3000 -N -f user@remote.host
После выполнения этой команды хост будет прослушивать порт 8080 и перенаправлять весь трафик на порт 3000, который открыт на локальном компьютере.
Удаленное перенаправление в основном используется для предоставления доступа кому-то извне ко внутренней службе.
Локальная и удаленная переадресации позволяют вам туннелировать и обмениваться данными с одним портом. При динамической переадресации вы можете запускать и обмениваться данными с несколькими портами.
Динамическое туннелирование создает сокет на локальном компьютере. Он работает как прокси-сервер SOCKS. Вы также можете сказать, что ваш локальный компьютер используется в качестве прокси-сервера SOCKS и по умолчанию прослушивает порт 1080. Когда хост подключается к этому порту, он перенаправляется на удаленную машину, затем — на динамическую машину через динамический порт.
Для настройки динамического туннелирования используется аргумент SSH -D. Пример команды:
ssh -D 9090 -N -f user@remote.host
Как только туннелирование установлено, вы можете настроить свое приложение для его использования — например, добавить прокси в браузер. Переадресация должна быть настроена отдельно для каждого приложения, для которого вы хотите туннелировать трафик.
Чтобы отключить openssh server, остановите службу SSH, выполнив команду:
sudo systemctl disable --now ssh
Запустить службу обратно можно командой:
sudo systemctl enable --now ssh
Команда Enable SSH в Ubuntu не переустанавливает ПО, так что ничего заново настраивать не придется. Она просто включает установленную и настроенную ранее службу.
Подготовили для вас выгодные тарифы на VDS/VPS
В этой статье мы рассмотрели основы использования SSH на машине с Ubuntu. Теперь вы знаете, как установить необходимое ПО для настройки защищенного соединения, сконфигурировать его, пробросить туннель и даже отключить службу, если она не используется.
Подключение по SSH в Ubuntu — распространенная задача, так что эти знания точно вам пригодятся. Если не в разработке и администрировании, то в личных целях. Например, для установки безопасного соединения между разными устройствами в локальной сети.