¿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 : repite cmd por siempre (Ctrl+C lo interrumpe)
rz : Recibe ficheros
suspend : suspende zssh sz ... : envia ficheros
version : Presenta información de versión
.. : ejecuta programa
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
En el lado remoto se ejecutará automáticamente rz
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:
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.