Реализация безопасных SFTP-загрузок в IEC 61131-3 с использованием Curl
Несколько недель назад я получил следующий вопрос. Вам нужно загрузить файл логирования на SFTP-сервер, используя программу, которая запускается в ESM.
SSH File Transfer Protocol (также Secure File Transfer Protocol, или SFTP) — это сетевой протокол, обеспечивающий доступ к файлам, передачу файлов и управление файлами над любым надежным потоком данных. Он был разработан Internet Engineering Task Force (IETF) как расширение протокола Secure Shell (SSH) версии 2.0 для обеспечения возможностей безопасной передачи файлов.
SFTP входит в состав прошивки PLCnext, так что с этим проблем быть не должно.
Шаг 1: Я начал с создания файла логирования с помощью структурированного текста. Примеры того, как это сделать, можно найти здесь:
Шаг 2: Мне понадобился какой-то SFTP-сервер для тестирования моего PLC-приложения. Я использовал CrushFTP, который установил в виртуальной машине, запущенной на моем ноутбуке.
После установки ПО нужно создать админа для веб-интерфейса. Как только это сделано, можно создать пользователя для доступа ПЛК.
Для этого примера: user = PLCnext, password = 123456789
Шаг 3: Загрузка файла через командную строку.

На скриншоте выше видно, что мы сначала даем команду, а во втором шаге вводим пароль. Если мы хотим автоматизировать эту процедуру с помощью ФБ «PBCL_SysLinuxShell_1», нам нужна однострочная команда.
Этот ФБ можно найти в библиотеке PLCnextBase. (https://www.plcnextstore.com/#/720)
Значит, нам нужна другая команда для выполнения загрузки файла. Посмотрим на Curl.

Версия, установленная с прошивкой 2020.6.1, не поддерживает SFTP. Благодаря Оливеру Варнеке, я смог установить другую версию Curl. Мы не будем проходить через весь процесс установки, но результат — версия с поддержкой SFTP. С прошивкой 2021.0.0 LTS вы сможете использовать следующую версию.

Благодаря Curl, мы можем использовать другую команду теперь.
curl -k -sS --key ~/.ssh/id_rsa --max-time 25 --connect-timeout 10 "sftp://192.168.1.50:22/test/Upload/" --user "PLCnext:12345679" -T "/opt/plcnext/Test.pdf" --ftp-create-dirs
Когда вы используете эту команду для Shell FB, вы можете увидеть результат в следующем файле логирования для проверки вашей программы.
/opt/plcnext/PLCnextBase.ServiceProvider.log
Некоторые пояснения об аргументах:
- -k, --insecure
(TLS) По умолчанию каждое SSL-соединение, которое делает curl, проверяется на безопасность. Эта опция позволяет curl продолжать и работать даже для серверных соединений, иначе считающихся небезопасными. Соединение с сервером проверяется путем убеждения, что сертификат сервера содержит правильное имя и успешно проходит проверку с использованием хранилища сертификатов. - -S, --show-error
При использовании с -s, --silent, заставляет curl показывать сообщение об ошибке, если он терпит неудачу. - -s, --silent
Тихий или שקטный режим. Не показывать индикатор прогресса или сообщения об ошибках. Делает Curl немым. Он все равно будет выводить запрошенные данные, потенциально даже в терминал/stdout, если вы их не перенаправили. Используйте -S, --show-error в дополнение к этой опции, чтобы отключить индикатор прогресса, но все равно показывать сообщения об ошибках. - --key <key>
(TLS SSH) Имя файла приватного ключа. Позволяет предоставить ваш приватный ключ в этом отдельном файле. Для SSH, если не указано, curl пробует следующие кандидаты по порядку: '~/.ssh/id_rsa', '~/.ssh/id_dsa', './id_rsa', './id_dsa'. - -m, --max-time <seconds>
Максимальное время в секундах, которое вы позволяете всей операции занять. Это полезно для предотвращения зависания пакетных заданий на часы из-за медленных сетей или падающих линков. - --connect-timeout <seconds>
Максимальное время в секундах, которое вы позволяете соединению curl занять. Это ограничивает только фазу соединения, так что если curl соединяется в заданный период, он продолжит — если нет, он выйдет. - -T, --upload-file <file>
Это передает указанный локальный файл на удаленный URL. Если в указанном URL нет части файла, curl добавит имя локального файла. - --ftp-create-dirs
(FTP SFTP) Когда FTP или SFTP URL/операция использует путь, который в настоящее время не существует на сервере, стандартное поведение curl — терпеть неудачу. Используя эту опцию, curl вместо этого попытается создать недостающие директории.
Ссылки:
Промышленные технологии
- Работа с интерфейсом командной строки в SPICE
- Индустриальный IoT для роста: выходя за рамки экономии затрат
- Четыре ключевых испытания для оценки эффективности силового трансформатора
- Предотвращение отключений электроэнергии: 5 ключевых стратегий защиты бизнеса
- Понимание просадок напряжения и полных отключений: ключевые различия и влияние на бизнес
- Ключевые факторы, влияющие на частоту обслуживания дизель-генераторов
- Выбор правильного резервного генератора: 4 ключевых вопроса для надежного электроснабжения
- Виртуальная электростанция Tesla: трансформация глобальной энергетической сети
- Вебинар: как мониторинг энергии повышает эффективность в Индустрии 4.0 — присоединяйтесь к экспертному вебина…
- Повышение эффективности завода: мастерство командной работы для лучшего управления