Введение
В этой лабораторной работе вы освоите базовые навыки подключения к удаленному серверу Linux и управления им с помощью протокола Secure Shell (SSH). Вы начнете с подготовки удаленной среды, что включает установку и настройку пакета сервера OpenSSH. Убедившись, что сервер готов принимать соединения, вы узнаете, как получить его IP-адрес — это критически важный шаг для установления соединения с клиентской машины.
После настройки сервера вы отработаете два основных метода удаленного взаимодействия по SSH. Во-первых, вы установите полноценную интерактивную сессию оболочки, которая предоставит вам полный доступ к командной строке удаленной машины. Во-вторых, вы научитесь выполнять одну конкретную команду на удаленном сервере без запуска полноценной интерактивной сессии — этот метод крайне эффективен для задач автоматизации и написания скриптов.
Установка и настройка сервера OpenSSH
На этом этапе вы установите пакет сервера OpenSSH, который позволит вашей системе принимать входящие SSH-соединения. SSH (Secure Shell) — это криптографический сетевой протокол для безопасной работы с сетевыми службами в незащищенной сети. Пакет openssh-server содержит основные компоненты для хостинга SSH-сервера.
Прежде всего, рекомендуется обновить список пакетов вашей системы, чтобы убедиться, что вы используете последнюю версию программного обеспечения. У пользователя labex есть привилегии sudo, необходимые для управления пакетами в масштабах всей системы.
Выполните следующую команду для обновления индекса пакетов:
sudo apt-get update
Вы увидите вывод, аналогичный приведенному ниже, который указывает на то, что списки пакетов загружаются из репозиториев:
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
Get:3 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
...
Fetched 1,845 kB in 2s (1,040 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up-to-date.
Теперь вы можете установить пакет openssh-server с помощью apt-get. Флаг -y автоматически отвечает «yes» на любые запросы, делая установку неинтерактивной.
sudo apt-get install -y openssh-server
В некоторых средах LabEx во время установки Ubuntu может отобразить диалоговое окно перезапуска служб. Если это произойдет, не перезапускайте vncserver, так как это может привести к отключению рабочего стола в браузере и появлению серого экрана. Вместо этого используйте один из следующих безопасных вариантов:
- Нажмите
Tab, чтобы выбрать<Cancel>, затем нажмите Enter. - Или нажмите
Space, чтобы снять выбор сvncserver, затем выберите<Ok>.
Если рабочий стол в браузере все же стал серым, обновите страницу LabEx, чтобы переподключиться к сессии и продолжить работу.
После завершения выполнения команды вы должны увидеть вывод, подтверждающий установку и настройку openssh-server и его зависимостей:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
ncurses-term openssh-sftp-server ssh-import-id
...
Setting up openssh-server (1:8.9p1-3ubuntu0.1) ...
...
Creating SSH2 ECDSA key; this may take some time ...
Creating SSH2 ED25519 key; this may take some time ...
...
Служба сервера OpenSSH, называемая sshd, должна запуститься автоматически после установки. Вы можете проверить ее статус с помощью команды systemctl, которая является инструментом для управления системой и менеджером служб systemd.
Проверьте статус службы SSH:
sudo systemctl status ssh
В выводе должно быть указано, что служба active (running). Это подтверждает, что SSH-сервер готов принимать соединения.
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-10-30 10:30:00 UTC; 5s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1234 (sshd)
Tasks: 1 (limit: 4617)
Memory: 1.2M
CPU: 8ms
CGroup: /system.slice/ssh.service
└─1234 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
...
Нажмите клавишу q на клавиатуре, чтобы выйти из режима просмотра статуса и вернуться к командной строке.
Отлично! Сервер OpenSSH установлен и запущен в вашей системе. На следующем этапе вы создадите нового пользователя для демонстрации SSH, а затем узнаете, как найти IP-адрес сервера и подключиться к нему.
Создание нового пользователя для демонстрации SSH
На этом этапе вы создадите новую учетную запись пользователя, которая будет использоваться для SSH-соединений. Поскольку у пользователя labex по умолчанию есть привилегии sudo, но мы не знаем его пароль для SSH-аутентификации, нам нужно создать отдельного пользователя с известным паролем для этой демонстрации.
Сначала создайте нового пользователя с именем sshuser, используя команду adduser. Эта команда создаст учетную запись пользователя и предложит вам задать пароль и другие данные.
sudo adduser sshuser
Вам будет предложено ввести и подтвердить пароль для нового пользователя. Для этой лабораторной работы используйте password123 в качестве пароля. Вас также попросят ввести дополнительную информацию, такую как полное имя, номер комнаты и т.д., но вы можете просто нажимать Enter, чтобы пропустить эти поля.
Adding user `sshuser' ...
Adding new group `sshuser' (1001) ...
Adding new user `sshuser' (1001) with group `sshuser' ...
Creating home directory `/home/sshuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for sshuser
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
Теперь убедитесь, что пользователь был успешно создан, проверив файл /etc/passwd:
grep sshuser /etc/passwd
Вы должны увидеть вывод, похожий на этот:
sshuser:x:1000:1000:,,,:/home/sshuser:/bin/bash
Это подтверждает, что учетная запись sshuser была создана с домашним каталогом /home/sshuser и использует оболочку bash. Точные значения UID (идентификатор пользователя) и GID (идентификатор группы) могут варьироваться в зависимости от существующих пользователей в системе.
Вы также можете проверить, был ли создан домашний каталог пользователя. Обратите внимание, что для доступа к домашнему каталогу другого пользователя требуются привилегии sudo:
sudo ls -la /home/sshuser
Вывод должен показать содержимое домашнего каталога пользователя:
total 20
drwxr-x--- 2 sshuser sshuser 4096 Jun 30 09:26 .
drwxr-xr-x 5 root root 4096 Jun 30 09:26 ..
-rw-r--r-- 1 sshuser sshuser 220 Jun 30 09:26 .bash_logout
-rw-r--r-- 1 sshuser sshuser 3771 Jun 30 09:26 .bashrc
-rw-r--r-- 1 sshuser sshuser 807 Jun 30 09:26 .profile
Обратите внимание, что домашний каталог имеет ограниченные права доступа (drwxr-x---), что означает, что доступ к нему имеют только владелец (sshuser) и пользователи той же группы. Именно поэтому для просмотра его содержимого требуется sudo.
Отлично! Теперь у вас есть учетная запись sshuser с паролем password123, которую вы можете использовать для SSH-соединений на следующих этапах.
Получение IP-адреса SSH-сервера
На этом этапе вы узнаете, как найти IP-адрес вашего SSH-сервера. IP-адрес — это уникальный числовой ярлык, присваиваемый каждому устройству, подключенному к компьютерной сети, которая использует протокол IP для связи. Чтобы установить SSH-соединение, клиентская машина должна знать IP-адрес сервера, к которому она хочет подключиться.
В типичном сценарии с двумя отдельными машинами вы бы использовали этот IP-адрес для подключения с клиента. Однако в этой лабораторной работе вы работаете на одной виртуальной машине, которая будет выступать одновременно и в роли SSH-сервера, и в роли SSH-клиента. Чтобы подключиться к SSH-серверу, работающему на вашей собственной машине, вы можете использовать специальный IP-адрес 127.0.0.1, также известный как localhost. Этот адрес всегда указывает на саму локальную машину.
Тем не менее, важно уметь находить сетевой IP-адрес вашей машины. Современная команда для этого в Linux — ip.
Чтобы отобразить информацию обо всех сетевых интерфейсах в вашей системе, используйте команду ip addr:
ip addr
В выводе будут перечислены все сетевые интерфейсы, такие как lo (интерфейс обратной петли), eth0 (основной Ethernet-интерфейс) и, возможно, docker0 (мостовой интерфейс Docker). Вам нужно найти запись inet под вашим основным сетевым интерфейсом, который обычно называется eth0.
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:01:82:ae brd ff:ff:ff:ff:ff:ff
altname enp0s5
altname ens5
inet 172.16.50.114/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
valid_lft 1892159625sec preferred_lft 1892159625sec
inet6 fe80::216:3eff:fe01:82ae/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:86:fe:f0:88 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
В примере выше основной IP-адрес для интерфейса eth0 — 172.16.50.114. Вы также можете увидеть интерфейс docker0, если в системе установлен Docker.
Более простая команда для отображения только IP-адресов машины — hostname -I.
hostname -I
Эта команда выведет список IP-адресов машины, разделенных пробелами.
172.16.50.114 172.17.0.1
Вывод показывает несколько IP-адресов: IP основного сетевого интерфейса (172.16.50.114) и IP моста Docker (172.17.0.1).
Теперь вы знаете, как найти IP-адрес вашей машины. На следующем этапе вы будете использовать адрес localhost (127.0.0.1) для подключения к SSH-серверу, работающему на этой же машине.
Установление интерактивной SSH-сессии с удаленным сервером
На этом этапе вы будете использовать SSH-клиент для установления интерактивной сессии с настроенным вами сервером OpenSSH. Интерактивная сессия предоставляет вам командную строку на удаленном сервере, позволяя выполнять команды так, как если бы вы физически вошли в систему.
Для подключения используйте команду ssh, за которой следуют имя пользователя и адрес сервера в формате ssh <user>@<hostname_or_ip>. Поскольку вы подключаетесь к серверу, работающему на вашей собственной машине (localhost), под пользователем sshuser, вы будете использовать IP-адрес 127.0.0.1.
Откройте терминал и выполните следующую команду:
ssh sshuser@127.0.0.1
При первом подключении к любому новому SSH-серверу ваш SSH-клиент отобразит отпечаток открытого ключа сервера и попросит подтвердить его подлинность. Это мера безопасности для предотвращения атак типа «человек посередине» (man-in-the-middle). Вам нужно ввести yes и нажать Enter, чтобы продолжить.
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '127.0.0.1' (ED25519) to the list of known hosts.
После подтверждения ключа хоста вам будет предложено ввести пароль для пользователя sshuser на удаленном сервере. Введите пароль password123, который вы задали при создании пользователя.
sshuser@127.0.0.1's password:
Как только вы введете правильный пароль, вы войдете в систему, увидите приветственное сообщение сервера и новую командную строку. Обратите внимание, как приглашение может измениться, указывая на то, что вы находитесь на удаленном хосте.
Welcome to Ubuntu 22.04.x LTS (GNU/Linux x.x.x-xx-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
sshuser@ubuntu:~$
Чтобы убедиться, что вы находитесь в удаленной сессии, вы можете выполнить команду, например pwd, чтобы вывести текущий рабочий каталог.
pwd
Вывод покажет ваш домашний каталог на удаленной машине.
/home/sshuser
Чтобы закрыть интерактивную SSH-сессию и вернуться к оболочке вашей локальной машины, просто введите exit и нажмите Enter.
exit
Вы увидите сообщение, подтверждающее закрытие соединения, и вернется ваше исходное приглашение командной строки.
logout
Connection to 127.0.0.1 closed.
Теперь вы успешно установили и закрыли интерактивную SSH-сессию.
Удаленное выполнение одной команды через SSH
На этом этапе вы узнаете, как выполнить одну команду на удаленном сервере без запуска полноценной интерактивной сессии. Это мощная функция SSH, широко используемая в скриптах и для автоматизации, так как она позволяет быстро получить информацию или выполнить задачу на удаленной машине, а затем немедленно отключиться.
Синтаксис заключается в том, чтобы просто добавить команду, которую вы хотите выполнить, в конец вашей обычной строки подключения ssh. Рекомендуется заключать удаленную команду в кавычки, чтобы локальная оболочка не интерпретировала ее.
Давайте попробуем выполнить команду hostname на удаленном сервере. Эта команда выводит имя хоста системы.
ssh sshuser@127.0.0.1 "hostname"
Вам будет предложено ввести пароль (password123), как и раньше. После того как вы его введете, команда hostname выполнится на удаленном сервере, ее вывод будет напечатан в вашем терминале, и SSH-соединение автоматически закроется.
sshuser@127.0.0.1's password:
iZrj91w6gb8osv0mra83hdZ
Обратите внимание, что вы немедленно возвращаетесь к локальной командной строке без необходимости вводить exit.
Вы также можете выполнять более сложные команды. Например, давайте выведем содержимое корневого каталога (/) на удаленном сервере с помощью ls -l /.
ssh sshuser@127.0.0.1 "ls -l /"
Снова введите пароль password123, когда появится запрос. Выводом будет длинный список файлов и каталогов в корневой файловой системе удаленного сервера.
sshuser@127.0.0.1's password:
total 72
lrwxrwxrwx 1 root root 7 Apr 21 2022 bin -> usr/bin
drwxr-xr-x 4 root root 4096 May 30 2023 boot
drwxr-xr-x 19 root root 4080 Jun 30 09:23 dev
drwxr-xr-x 137 root root 12288 Jun 30 09:26 etc
drwxr-xr-x 5 root root 4096 Jun 30 09:26 home
lrwxrwxrwx 1 root root 7 Apr 21 2022 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Apr 21 2022 lib32 -> usr/lib32
lrwxrwxrwx 1 root root 9 Apr 21 2022 lib64 -> usr/lib64
lrwxrwxrwx 1 root root 10 Apr 21 2022 libx32 -> usr/libx32
drwx------ 2 root root 16384 Dec 28 2022 lost+found
drwxr-xr-x 2 root root 4096 Apr 21 2022 media
drwxr-xr-x 2 root root 4096 Apr 21 2022 mnt
drwxr-xr-x 5 root root 4096 Feb 27 2023 opt
dr-xr-xr-x 231 root root 0 Jun 30 09:22 proc
drwx------ 8 root root 4096 Jun 30 09:26 root
drwxr-xr-x 35 root root 1060 Jun 30 09:30 run
lrwxrwxrwx 1 root root 8 Apr 21 2022 sbin -> usr/sbin
drwxr-xr-x 10 root root 4096 Feb 18 2023 snap
drwxr-xr-x 2 root root 4096 Apr 21 2022 srv
dr-xr-xr-x 13 root root 0 Jun 30 09:22 sys
drwxrwxrwt 18 root root 4096 Jun 30 09:30 tmp
drwxr-xr-x 14 root root 4096 Apr 21 2022 usr
drwxr-xr-x 13 root root 4096 Apr 21 2022 var
Этот метод невероятно эффективен для управления несколькими серверами или для интеграции удаленных операций в ваши локальные shell-скрипты. Теперь вы изучили два основных способа использования SSH: для интерактивных сессий и для выполнения отдельных команд.
Резюме
В этой лабораторной работе вы изучили основные шаги по включению и использованию Secure Shell (SSH) для удаленного управления сервером. Вы начали с подготовки удаленного сервера Linux, что включало обновление индекса репозитория пакетов с помощью sudo apt-get update и последующую установку пакета openssh-server. Этот процесс настроил систему на безопасный прием входящих SSH-соединений, автоматически запустив службу sshd.
Затем вы создали отдельную учетную запись пользователя (sshuser) с известным паролем (password123) для целей SSH-аутентификации, поскольку у пользователя labex по умолчанию есть привилегии sudo, но нет пароля для SSH-соединений. Вы проверили создание пользователя и убедились, что домашний каталог был правильно настроен.
Когда сервер и учетная запись пользователя были готовы, вы узнали, как получить IP-адрес сервера — критически важную информацию для любого клиента, чтобы инициировать соединение. Затем вы отработали два основных способа использования SSH: установление полноценной интерактивной сессии командной строки для работы на удаленном сервере напрямую и выполнение одной неинтерактивной команды удаленно, что крайне эффективно для задач автоматизации и написания скриптов.



