Удалённый доступ и передача файлов с помощью SSH

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

Введение

SSH предоставляет зашифрованный доступ к командной строке другой учётной записи Linux, а SCP использует тот же механизм аутентификации и транспорт для копирования файлов. При первом безопасном подключении необходимо проверить ключ узла сервера; при последующих подключениях вместо постоянного ввода пароля учётной записи можно использовать персональный ключ.

В этой лабораторной работе в качестве удалённого узла используется изолированная учётная запись remoteuser на localhost. Хотя обе учётные записи находятся на одной учебной виртуальной машине, протокол SSH, запросы аутентификации, удалённый домашний каталог и передача файлов работают так же, как в базовом сценарии с двумя узлами. Стандартный способ доступа labex по SSH не изменяется.

Проверка цели SSH

На этом шаге вы определите SSH-клиент, разрешите имя цели, убедитесь, что сервер принимает подключения, и просмотрите его открытый ключ узла.

Перейдите в локальный рабочий каталог:

cd /home/labex/project/ssh-lab

Выведите версию клиента OpenSSH. Эта программа записывает версию в стандартный поток ошибок, поэтому 2>&1 объединяет его со стандартным выводом:

ssh -V 2>&1

Разрешите локальную цель с помощью системной конфигурации службы имён:

getent hosts localhost

Убедитесь, что SSH-сервер прослушивает TCP-порт 22:

sudo ss -ltnp | grep ':22'

ssh-keyscan получает открытые ключи узла без выполнения входа в систему. Передайте ключ ED25519 в ssh-keygen -lf -, чтобы вывести его отпечаток:

ssh-keyscan -t ed25519 localhost 2>/dev/null | ssh-keygen -lf -

В реальной среде перед подтверждением сравните этот отпечаток с доверенным значением, предоставленным администратором. Сохраните краткую сводку параметров цели:

printf 'target=localhost\nport=22\nuser=remoteuser\n' > ssh-target.txt
cat ssh-target.txt

Открытие первой удалённой оболочки

На этом шаге вы проверите ключ узла, выполните аутентификацию по паролю, изучите удалённую учётную запись и завершите работу удалённой оболочки.

Подключитесь, используя формат user@host:

ssh remoteuser@localhost

Поскольку во время настройки предыдущая запись ключа узла для localhost была удалена, SSH спросит, доверяете ли вы отображаемому отпечатку. Сравнив его с отпечатком из шага 1, введите:

yes

В ответ на запрос пароля введите:

RemoteLab123!

Вводимый пароль не отображается. После входа приглашение командной строки относится к remoteuser, а не к labex. Проверьте удалённого пользователя, имя узла и текущий каталог:

whoami
hostname
pwd

Создайте маркер удалённого подключения в домашнем каталоге удалённой учётной записи:

mkdir -p ~/ssh-lab
printf 'connected as %s\n' "$(whoami)" > ~/ssh-lab/connected.txt

Завершите удалённую оболочку и вернитесь к локальному приглашению labex:

exit

Команда exit завершает только удалённую оболочку; локальный терминал остаётся открытым.

Выполнение удалённой команды

На этом шаге вы выполните команды удалённо без открытия длительного интерактивного сеанса и сохраните их вывод локально.

При необходимости снова перейдите в локальный рабочий каталог:

cd /home/labex/project/ssh-lab

Укажите команду в кавычках после имени узла. SSH выполнит её удалённо и вернёт результат в локальный терминал:

ssh remoteuser@localhost 'whoami; uname -srm; uptime'

При появлении запроса введите RemoteLab123!. Точки с запятой разделяют команды, которые интерпретирует удалённая оболочка.

Выполните вторую удалённую команду и перенаправьте полученный вывод в локальный файл:

ssh remoteuser@localhost 'printf "remote_user=%s\nremote_home=%s\n" "$(whoami)" "$HOME"' > remote-context.txt

Снова введите пароль. Перенаправление > обрабатывается локальной оболочкой, поэтому файл remote-context.txt создаётся в локальном рабочем каталоге:

cat remote-context.txt

В файле должны быть указаны remoteuser и /home/remoteuser.

Передача файла с помощью SCP

На этом шаге вы загрузите локальный файл, проверите его содержимое удалённо и скачаете его под новым локальным именем.

Создайте локальный пример конфигурации:

cd /home/labex/project/ssh-lab
printf 'mode=training\nport=8080\n' > app.conf

SCP использует формат user@host:path для удалённого пути. Загрузите файл в подготовленный удалённый каталог incoming:

scp app.conf remoteuser@localhost:/home/remoteuser/incoming/app.conf

При появлении запроса введите RemoteLab123!. Проверьте удалённое содержимое через SSH:

ssh remoteuser@localhost 'cat /home/remoteuser/incoming/app.conf'

Снова введите пароль. Теперь поменяйте местами источник и назначение, чтобы скачать файл:

scp remoteuser@localhost:/home/remoteuser/incoming/app.conf downloaded-app.conf

Введите пароль, затем сравните исходный локальный файл со скачанной копией:

cmp app.conf downloaded-app.conf && echo "The files match"

Рекурсивная передача каталога

На этом шаге вы воспользуетесь рекурсивным режимом SCP, чтобы скопировать дерево каталогов в удалённую учётную запись.

Создайте небольшое локальное дерево проекта:

cd /home/labex/project/ssh-lab
mkdir -p site/assets
printf '<h1>SSH transfer practice</h1>\n' > site/index.html
printf 'body { color: navy; }\n' > site/assets/style.css

Параметр -r рекурсивно копирует каталоги вместе со всем их содержимым:

scp -r site remoteuser@localhost:/home/remoteuser/incoming/

При появлении запроса введите RemoteLab123!. Выведите дерево удалённых файлов с помощью однократной команды SSH:

ssh remoteuser@localhost 'find /home/remoteuser/incoming/site -type f -printf "%P\n" | sort'

Снова введите пароль. Вы должны увидеть assets/style.css и index.html.

Создание персонального ключа SSH

На этом шаге вы создадите отдельную пару ключей ED25519 и проверите права доступа к файлам и отпечаток ключа.

Пара ключей состоит из закрытого ключа, который хранится у вас, и открытого ключа, который можно установить в удалённой учётной записи. Создайте отдельный учебный ключ без парольной фразы, чтобы автоматическая проверка могла его использовать:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/labex_remote_ed25519 -N '' -C 'labex-remote-practice'

Параметр -t выбирает алгоритм, -f задаёт имя файла, -N '' устанавливает пустую учебную парольную фразу, а -C добавляет метку. В рабочих системах для ключей обычно следует использовать надёжную парольную фразу, если ограничения автоматизации этого не запрещают.

Проверьте два файла и их права доступа:

ls -l ~/.ssh/labex_remote_ed25519 ~/.ssh/labex_remote_ed25519.pub

Закрытый ключ должен быть доступен для чтения только пользователю labex. Файл .pub предназначен для передачи другим сторонам. Выведите отпечаток открытого ключа:

ssh-keygen -lf ~/.ssh/labex_remote_ed25519.pub

Никогда не копируйте и не разглашайте закрытый ключ.

Установка и использование открытого ключа

На этом шаге вы установите открытый ключ для remoteuser, подключитесь без запроса пароля и проверите передачу файлов с аутентификацией по ключу.

ssh-copy-id добавляет открытый ключ в ~/.ssh/authorized_keys удалённой учётной записи и устанавливает подходящие права доступа:

ssh-copy-id -i ~/.ssh/labex_remote_ed25519.pub remoteuser@localhost

Для этого последнего действия с аутентификацией по паролю введите RemoteLab123!. Проверьте отдельный закрытый ключ с помощью -i:

ssh -i ~/.ssh/labex_remote_ed25519 remoteuser@localhost 'printf "key authentication works\n" > ~/ssh-lab/key-authenticated.txt; cat ~/ssh-lab/key-authenticated.txt'

Эта команда не должна запрашивать пароль удалённой учётной записи. Используйте тот же ключ для SCP:

scp -i ~/.ssh/labex_remote_ed25519 remoteuser@localhost:~/ssh-lab/key-authenticated.txt key-authenticated.txt
cat key-authenticated.txt

В скачанном файле должна содержаться строка key authentication works. Ключ узла подтверждает подлинность сервера, а ваш закрытый ключ — вашу личность для удалённой учётной записи. Они решают разные задачи доверия.

Итоги

Вы проверили ключ узла SSH, открыли и закрыли удалённую оболочку, выполнили однократные удалённые команды и научились отличать локальное перенаправление от удалённого выполнения. Вы загружали и скачивали файлы с помощью SCP, а также рекурсивно копировали каталог.

Кроме того, вы создали отдельную пару ключей ED25519, защитили закрытый ключ, установили только открытый ключ и повторно использовали этот ключ для SSH и SCP без ввода пароля. Это основные навыки, необходимые для безопасного удалённого администрирования на начальном уровне.