13 april 2023
¿Como envío y recibo ficheros por Zmodem en Ubuntu?
Reunido en Consejo de Ministros en la Casa Rosada, Juan Perón explica cómo utilizar el protocolo Zmodem para transmitir ficheros en Ubuntu.
¡Estimados señores!
Uno de los fundamentos del trabajo en el estado es la segura transferencia de ficheros.
Cualquiera lo puede hacer en papel y para ello se han elaborado los métodos de firmado, lacrado, y en tiempo de guerra, el cifrado.
Cuando la evolución de la técnica nos permitió introducir la máquina - apoyada en enlaces de datos públicos - se hizo evidente que dichos métodos resultaban a todas luces suficientes, en tanto no se puede responder con conciliábulos de ayer a los problemas de hoy. Los nuevos predicamentos de la tecnología hicieron imperativo que tuviésemos que encontrar nuevos y especiales temperamento con los cuales cuidar el traslado de los ficheros.
Resulta innegable que para transferir ficheros a través de una red de datos moderna como las que utiliza nuestro Movimiento, debe especialmente recurrirse a la copia a través de shell seguro que nos ofrece scp.
Este método sin embargo no es primordial: durante el Peronismo del Segundo Plan Quinquenal, en aquellas queridas máquinas antiguas conectadas a redes heredadas, no podíamos más que hacer transmisiones de fichero a través del viejo y peludo FTP. Sin embargo, no siempre fue así, y en el mundo "retro" no siempre lo será: podríamos encontrarnos con medios del Primer Peronismo, donde se carecía de dicho protocolo. Ante tal incordio, podríamos recurrir a un amigo de la interconexión que brillaba en aquellos momentos donde todo estaba por hacerse: el viejo protocolo de 1986 para la transmisión en línea, el Zmodem.
Zmodem es un protocolo propietario de transferencia - desarrollado por Charles Forsberg para la red de paquetes conmutados Telenet - el cual obtuvo su bien merecido carilo al ofrecer al Pueblo una buena velocidad de transmisión sobre cableados de par de cobre. La idea detrás del mismo era lograr atascos en las transmisiones por módem a través de cable telefónico.
Por acuerdo se evitaba el envío superfluo de paquetes de ACK ("enterado") en la transmisión, y sólo se recurría a enviar paquetes NAK ("no enterado") ante algún error, lo que aceleraba no menos de un 30% El envío de datos en corriente electrónica ("stream"), si esta se hacía en líneas de alta calidad, estables de Teléfonos del Estado, y sobre todo full-dúplex (como suele ser el caso en la conexión Ethernet).
Vean señores, en particular, este protocolo puede venirnos de perillas para enviar a través de múltiples canales de transmisión, incluso algunos que nadie pensó al momento de diseñarlo. En particular, podremos usarlo para transmitir a través de líneas de datos de área local, e incluso a través de puertos de comunicación seriales circunstanciales. Esto permitiría transmitir datos - comparativamente a baja velocidad - entre sistemas UNIX y similares, e incluso máquinas antiguas con puerto de comunicación serial.
A tal fin os enseñaré a obrar con los programas sz y rz, que implementan Zmodem en sistemas UNIX, para enviar y recibir por zmodem respectivamente.
Sin embargo, en equipamiento actual sus limitaciones no son baladíes. Están dadas por inconvenientes no conecbidos a la hora de realizarlo originalmente en la década del ochenta. Una principal es la incapacidad de transmitir ficheros mayores a los 4 GB, inusitado por entonces. La otra es la imposibilidad de extender el protocolo para transmitir de forma segura.
Sin embargo, podremos subsanar esto último mediante una implementación moderna para sistemas GNU con Linux, que haga uso de Zmodem envolviéndolo en el protocolo sobre la indestructible capa del Shell Seguro SSH: esta se denomina zssh.
Para poder utilizar Zmodem de manera segura en nuestro sistema Ubuntu podremos recurrir a abrir una terminal con Ctrl+Alt+T y utilizar los siguientes comandos para instalar la paquetería necesaria tanto en la máquina a emitir como en la máquina a recibir.
sudo apt install lrzsz zssh
En el caso de máquinas con DOS, podremos recurrir a implementaciones como ls oficial dsz, o bien alternativas como rzsz, o bien txzm. Usar zmodem con SSH con zssh
En el caso de una máquina con Linux, podremos conectamos al servidor de manera segura recurriendo a zssh, mediante:
zssh -e usuario@maquina
(claro que si tenemos, una llave PGP opcional le agregaríamos -i ~/.ssh/llave_pgp.key)
Zssh responderá con:
Press ^@ (C-Space) for enter File Transfer Mode, then ? for help.
Y conectará al host remoto (solicitando contraseña si no le indicamos nuestra llave opcional, claro está).
Una vez conectados con Zssh, podremos usar una sesión de shell seguro similar a SSH, que corre nuestro intérprete de comandos normal (en el caso de Ubuntu se trata de Bash). Sin embargo, al presionar Ctrl+Barra Espaciadora podremos ingresar al Modo de Transferencia de ficheros, el cual se denota con el prompt zssh >.
Lo que nos indica que presionemos Ctrl+Barra espaciadora para ingresar al Modo de Transferencia de Ficheros, y luego ingresemos ? para iniciar la ayuda de lrzsz:
zssh > ?
A lo cual el sistema deberá devolvernos algo como: Comandos Incorporados de Zssh :
? : Mensaje de ayuda
cd : cambiar directorio
disconnect : desconecta y sale
escape [^X] : Cambia la tecla escape a Ctrl+X
sin argumento, imprime la tecla de escape actual
exit : sale del modo de transferencia de ficheros
help : Mensaje de ayuda
hook prg : cuelga el programa 'prg' en la terminal en lugar de sz o rz
quit : lo mismo que exit
repeat
Uso :
Descargas : en el shell remoto ejecute sz antes de cambiar al modo de transferencias, luego en el shell local ingrese rz
Subidas : En el shell local cambie al modo transferencias y ingrese sz
Pistas:
- Si la transferencia nunca se completa, use la opción -e de sz/rz
- Puede interrumpir transferencias con Ctrl+c
- Si se queda trabado en rz/sz (por ejemplo, si corrió rz, pero decidió no transmitir nada, presione Ctrl+x una docena de veces para detenerlo
- Use sz -y
para sobreescribir los ficheros remotos.
Bajar archivos usando ZMODEM
Como vemos en la ayuda, para bajar un fichero desde el servidor, debemos enviarlo desde el servidor, usando allí sz:
sz -e archivo.ext
Luego de ponerlo a enviar en el servidor, pasamos al Modo de Transferencia de Archivos en máquina local presionamos Ctrl+Barra espaciadoras, y en el prompt zssh > del lado del cliente iniciamos la transferencia indicando rz -e:
zssh > rz -e
El cliente nos indicará la transferencia:
Receiving archivo.ext Bytes received: 14120/ 14120 BPS:60536
Transfer complete
En el caso de usar tmux, debemos recurrir a una implementación especial del envolvedor, llamada trzsz.
Subir archivos con ZMODEM
Para enviar un fichero al servidor, en la máquina local presionamos Ctrl+Barra espaciadora para activar el modo de transferencia de archivos, y en el prompt zssh > simplemente indicamos:
zssh > sz -e archivo.ext
A lo cual el sistema nos responderá con las estadísticas similares a:
Sending: archivo.ext Bytes Sent: 976 BPS:19892
Transfer complete
esto nos servirá para afrontar transmisiones en red de área local o incluso envuelto en SSH.
Zmodem por puerto serial a DOS
Pero podremos recurrir a hacer transmisiones a través de un adaptador de puerto serial.
Para ello usamos un adaptador, conectando a 9600 baudios, junto con algún programa para terminal, por ejemplo minicom (en la terminal) o cutecom (en la interfaz gráfica de GNU).
Si en lugar de ellos deseamos usar la terminal con sz, debemos recurrir al modificador -b si es un fichero binario, y -a si es un fichero de texto ASCII, e indicar el dispositivo del puerto serial (por ejemplo, si recurrimos a un adaptador USB a puerto serial es /dev/ttyUSB0:
sz -e fichero.ext -b /dev/ttyUSB0 9600 8N1
En CP/M+86 y similares podremos agregarle la opción -o que evitará recurrir a control de 32 bits y lo limitará a 16 bits.
Para recibirlo en otra máquina que no tenga Linux, por ejemplo una con FreeDOS o MS-DOS, usaríamos el comando COPY por ejemplo, desde el puerto serie com2:
copy com2 fichero.ext
Esto iniciará la transmisión del fichero que irá llegando por Zmodem. Ante la necesidad, podremos interrumpirla con Ctrl+z.