Implementar subidas SFTP seguras en IEC 61131-3 usando Curl
Hace algunas semanas, recibí la siguiente pregunta. Necesita subir un archivo de log hacia un servidor SFTP, usando un programa que se ejecuta en el ESM.
El Protocolo de Transferencia de Archivos SSH (también Protocolo Seguro de Transferencia de Archivos, o SFTP) es un protocolo de red que proporciona acceso a archivos, transferencia de archivos y gestión de archivos sobre cualquier flujo de datos confiable. Fue diseñado por el Internet Engineering Task Force (IETF) como una extensión del protocolo Secure Shell (SSH) versión 2.0 para proporcionar capacidades seguras de transferencia de archivos.
SFTP está incluido en el firmware de PLCnext, así que esto no debería ser un problema.
Paso 1: Empecé a crear un archivo de log usando texto estructurado. Ejemplos de cómo hacer esto, se pueden encontrar aquí:
- Datalogging en IEC 61131-3 - El principio básico
- Datalogging en IEC 61131-3 - Cree su propio gestor de archivos
Paso 2: Necesitaba algún servidor SFTP para probar mi aplicación PLC. Usé CrushFTP, que instalé en una máquina virtual que se ejecutaba en mi portátil.
Después de la instalación del software, necesita crear un usuario admin para la interfaz web. Una vez hecho esto, puede crear un usuario para el acceso del PLC.
Para este ejemplo: usuario = PLCnext, contraseña = 123456789
Paso 3: Subir un archivo usando la línea de comandos.
En la captura de pantalla anterior puede ver que primero damos un comando y en un segundo paso ingresamos la contraseña. Si queremos automatizar este procedimiento usando el FB "PBCL_SysLinuxShell_1", necesitamos un comando de una sola línea.
Este FB se puede encontrar en la biblioteca PLCnextBase. (https://www.plcnextstore.com/#/720)
Así que, necesitamos otro comando para realizar la subida del archivo. Veamos Curl.
La versión que se instala con firmware 2020.6.1 no soporta SFTP. Gracias a Oliver Warneke, pude instalar otra versión de Curl. No pasaremos por el proceso de instalación completo, pero el resultado es una versión que soporta SFTP. Con firmware 2021.0.0 LTS, podrá usar la siguiente versión.
Gracias a Curl, ahora podemos usar otro comando.
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
Cuando use este comando para el FB Shell, puede ver el resultado en el siguiente archivo de log para verificar su programa.
/opt/plcnext/PLCnextBase.ServiceProvider.log
Algunas explicaciones sobre los argumentos:
- -k, --insecure (TLS) Por defecto, cada conexión SSL que curl hace se verifica para ser segura. Esta opción permite a curl proceder y operar incluso para conexiones de servidor consideradas inseguras. La conexión del servidor se verifica asegurando que el certificado del servidor contiene el nombre correcto y se verifica exitosamente usando el almacén de certificados.
- -S, --show-error Cuando se usa con -s, --silent, hace que curl muestre un mensaje de error si falla.
- -s, --silent Modo silencioso o tranquilo. No muestra medidor de progreso ni mensajes de error. Hace a Curl mudo. Aún emitirá los datos que pida, potencialmente incluso a la terminal/stdout a menos que lo redirija. Use -S, --show-error además de esta opción para deshabilitar el medidor de progreso pero seguir mostrando mensajes de error.
- --key <key> (TLS SSH) Nombre de archivo de clave privada. Le permite proporcionar su clave privada en este archivo separado. Para SSH, si no se especifica, curl intenta los siguientes candidatos en orden: '~/.ssh/id_rsa', '~/.ssh/id_dsa', './id_rsa', './id_dsa'.
- -m, --max-time <seconds> Tiempo máximo en segundos que permite que la operación completa tome. Esto es útil para prevenir que sus trabajos por lotes se cuelguen por horas debido a redes lentas o enlaces caídos.
- --connect-timeout <seconds> Tiempo máximo en segundos que permite que la conexión de curl tome. Esto solo limita la fase de conexión, así que si curl conecta dentro del período dado continuará - si no, saldrá.
- -T, --upload-file <file> Esto transfiere el archivo local especificado a la URL remota. Si no hay parte de archivo en la URL especificada, curl añadirá el nombre del archivo local.
- --ftp-create-dirs (FTP SFTP) Cuando una URL/operación FTP o SFTP usa una ruta que no existe actualmente en el servidor, el comportamiento estándar de curl es fallar. Usando esta opción, curl intentará crear los directorios faltantes.
Referencias:
Tecnología Industrial
- Uso de la interfaz de línea de comandos con SPICE
- Impulse su Crecimiento: Cómo el eCommerce Puede Imulsionar su Negocio
- Aprovechando el IoT Industrial para el Crecimiento: Más Allá del Ahorro de Costes
- Cuatro pruebas clave para evaluar la eficiencia de transformadores de potencia
- Prevención de cortes de energía: 5 estrategias esenciales para proteger su negocio
- Diferencias entre brownout y blackout: impacto en el negocio
- Factores Clave que Influyen en la Frecuencia de Mantenimiento de Generadores Diésel
- Cómo Elegir el Generador de Reserva Adecuado: 4 Preguntas Clave para Energía Confiable
- La Central Eléctrica Virtual de Tesla: Transformando la red energética global
- Descubra Cómo el Monitoreo Energético Impulsa la Eficiencia en Industria 4.0 – Únase a Nuestro Webinar Experto
- Mejore la Eficiencia de Fábrica: Domine el Trabajo en Equipo para una Gestión Superior