Подключение к удаленному серверу Linux по SSH

LinuxBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы освоите базовые навыки подключения к удаленному серверу 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-адрес для интерфейса eth0172.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: установление полноценной интерактивной сессии командной строки для работы на удаленном сервере напрямую и выполнение одной неинтерактивной команды удаленно, что крайне эффективно для задач автоматизации и написания скриптов.