SSH и SCP · 4 min read · Nov 22, 2025

Использование защищенной оболочки (SSH) для входа и защищенной копии (SCP) для передачи данных на Linux

SSH означает защищенная оболочка. Это зашифрованный протокол удаленного входа. После его настройки на каждом узле его можно использовать для связи с различными другими узлами в этой сети.

Основные преимущества SSH:

  • SSH использует алгоритм шифрования RSA для генерации открытых и закрытых ключей, что делает вторжение крайне сложным.
  • Поскольку SSH является протоколом удаленного входа, его можно настроить на ноутбуке. Это означает, что вы можете использовать свой ноутбук для беспроводного подключения к кластеру Raspberry Pi.
  • Поскольку такие протоколы, как SCP (Secure Copy) и SFTP (Secure File Transfer Protocol), работают поверх SSH, вы можете использовать их для передачи файлов и папок непосредственно с одного узла на другой.
  • SSH поддерживает одноразовый вход. Это означает, что вам нужно ввести учетные данные только в первый раз, когда вы входите. Со второго входа и далее это не обязательно.

Давайте начнем с генерации SSH-ключей. Для использования SSH ключи должны быть сгенерированы между двумя или более узлами, чтобы могла происходить передача данных. Мы используем RSA для шифрования. Обратите внимание, что на одном узле мы генерируем ключи, и он будет иметь закрытые или секретные ключи. Тот же узел также сгенерирует открытый ключ, который будет отправлен другим узлам, желающим отправить данные на этот узел. Выполните следующие команды на узле, с которого вы хотите отправить данные. Я называю этот узел “главным узлом”, а другие узлы - “рабочими узлами”.

cd ~  
ssh-keygen --t rsa --C "raspberrypi@raspberrypi"

Эти две команды устанавливают расположение по умолчанию /home/pi/_ssh/id_rsa для хранения ключа.

Если вас попросят ввести пароль, оставьте пароль пустым. После этого следующим шагом будет отправка открытых ключей на рабочий узел. Убедитесь, что рабочий узел подключен к сети. Теперь мы можем настроить ключи шифрования на рабочем узле, поэтому используем IP-адрес рабочего узла. Выполните следующую команду на главном узле.

cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir .ssh;cat >> .ssh/authorized_keys"

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

ssh [email protected]

В приведенной выше команде “pi” указывает на пользователя, по умолчанию все PIs, использующие Raspbian, будут иметь пользователя “pi”, а “192.168.3.216” - это IP-адрес моего клиента. Вам нужно будет изменить его, чтобы он представлял IP-адрес вашего клиента PI.

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

ssh [email protected] 'sudo echo "cilent001" | sudo nano /etc/hostname'  
ssh [email protected] 'sudo echo "cilent002" | sudo nano /etc/hostname'  
ssh [email protected] 'sudo echo "cilent003" | sudo nano /etc/hostname'

Как показано выше, мы можем использовать SSH для выполнения команд на других узлах/PIs, не входя в них. Следующий пример показывает, как безопасно выключить узел в сети с IP-адресом 192.168.3.216

ssh [email protected] 'sudo poweroff'

Следующая фигура показывает, как SSH используется для входа в рабочий узел (192.168.3.216) и с рабочего узла возвращает управляющий терминал на главный узел.

Как видно на приведенной выше фигуре, вход в рабочий узел происходит напрямую, то есть без ввода пароля, кроме первого раза. Но каждый раз, когда управление терминалом возвращается на главный узел (192.168.3.215), необходимо ввести учетные данные для входа. Таким образом, главный узел всегда защищен от внешних угроз.

Итак, после выдачи команд через SSH другим узлам могут возникнуть ситуации, когда данные необходимо отправить на несколько узлов. Если количество узлов небольшое, то мы можем вручную войти в каждый узел, подключить его к дисплею и клавиатуре и отправить файлы. Но это крайне неэффективный способ сделать это, когда размер кластера велик. Более простым способом будет использование SCP для отправки файлов. Установите SCP с помощью команды:

sudo apt-get install scp

Пожалуйста, обратите внимание, что некоторые операционные системы Linux могут поставляться с предустановленным SCP, но Raspbian, который мы использовали, не имел его. Общая команда для отправки одного файла:

scp (путь к файлу на локальном устройстве) [email protected] (путь к удаленному местоположению)

Пример:

scp /pi/example.c [email protected] /pi/project

Здесь удаленное устройство, на которое отправляются данные, распознается по IP-адресу. Многие файлы в каталоге можно отправить с помощью рекурсивной опции (-R). Например:

scp -r /pi/project [email protected] /pi/project

В приведенной выше команде рекурсивно передаются все файлы в /pi/project с локального хоста в рекурсивную папку на удаленном хосте, идентифицированном по IP-адресу.

Изображение ниже демонстрирует различные команды ssh и scp. Оно начинается с перечисления содержимого своего текущего каталога, затем вызывает “scp” рекурсивно для передачи всех файлов из текущего каталога в папку на другом узле. Затем оно входит в другой узел и показывает, что scp успешно передал содержимое в назначение.

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

  • Мы можем использовать опцию “-p” для сохранения времени изменения, времени доступа и режимов из оригинального файла. Пример: scp -p test.c [email protected]:~/ Здесь время доступа, режимы доступа и время последнего изменения файла “test.c” будут сохранены на узле назначения.
  • SCP позволяет сжимать файлы перед их отправкой через сеть на место назначения. Это очень полезно, когда файл(ы) очень большие для передачи, и, следовательно, сжатие увеличит скорость, с которой он будет отправлен. Для этого мы используем опцию “-C”. Пример: scp -pC test.c [email protected]:~/ Здесь мы видим, что можно использовать несколько опций, и обе их функции будут применены к команде.
  • Сетевое программирование включает в себя отправку и получение данных через порты, и SCP можно использовать для отправки данных через определенные порты на удаленный хост. Это можно сделать с помощью опции “-P”. Пример: scp -P 21938 test.c [email protected]:~/ Здесь порт, используемый для отправки данных, - 1938.
  • Могут быть случаи, когда вы не хотите знать статус передачи файлов, как на изображении выше. Имеет смысл отключить статус передачи, когда имеется большое количество файлов. Мы можем сделать это, используя опцию “-q”. Пример:
scp -rq ~/files [email protected]:~/files

Здесь содержимое папки с именем files передается в папку files на другом узле, но статусная строка и сообщения отладки отключены, то есть не отображаются.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.