Title: Transfer your files with Kermit
       Author: Solène
       Date: 31 January 2019
       Tags: unix kermit
       Description: 
       
       Hi, it's been long time I wanted to write this article. The topic is
       Kermit,
       which is a file transfer protocol from the 80's which solved problems
       of that
       era (text files and binaries files, poor lines, high latency etc..).
       
       There is a comm/kermit package on OpenBSD and I am going to show you
       how to use
       it. The package is the program **ckermit** which is a client/server for
       kermit.
       
       Kermit is a lot of things, there is a protocol, but it's also the
       client/server, when you type **kermit**, it opens a kermit **shell**,
       where you
       can type commands or write kermit scripts. This allows scripts to be
       done using
       a kermit in the shebang.
       
       I personally use kermit over ssh to retrieve files from my remote
       server, this
       requires kermit on both machines. My script is the following:
       
           #!/usr/local/bin/kermit +
           set host /pty ssh -t -e none -l solene perso.pw kermit
           remote cd /home/ftp/
           cd /home/solene/Downloads/
           reget /recursive /delete .
           close
           exit
       
       This connects to the remote server and starts kermit. It changes the
       current
       directory on the remote server into **/home/ftp** and locally it goes
       into
       **/home/solene/Downloads**, then, it start retrieving data, continuing
       previous
       transfer if not finished (reget command), for every file finished, it's
       deleted
       on the remote server. Once finished, it close the ssh connection and
       exits.
       
       The transfer interfaces looks like this. It shows how you are
       connected, which
       file is currently transferring, its size, the percent done (0% in the
       example),
       time left, speed and some others information.
       
           C-Kermit 9.0.302 OPEN SOURCE:, 20 Aug 2011, solene.perso.local
       [192.168.43.56]
       
                   Network Host: ssh -t -e none -l solene perso.pw kermit
       (UNIX)
                   Network Type: TCP/IP
                         Parity: none
                    RTT/Timeout: 01 / 03
                      RECEIVING: src.tar.gz => src.tar.gz => src.tar.gz
                      File Type: BINARY
                      File Size: 183640885
                   Percent Done:
                                    
       ...10...20...30...40...50...60...70...80...90..100
            Estimated Time Left: 00:43:32
             Transfer Rate, CPS: 70098
                   Window Slots: 1 of 30
                    Packet Type: D
                   Packet Count: 214
                  Packet Length: 3998
                    Error Count: 0
                     Last Error:
                   Last Message:
       
           E to send Error packet, ^C to quit immediately, ^L to refresh
       screen.
       
       
       What's interesting is that you can skip a file by pressing "X", kermit
       will
       stop the downloading (but keep the file for later resuming) and start
       downloading the next file. It can be useful sometimes when you transfer
       a bunch
       of files, and it's really big and you don't want it now and don't want
       to type
       the command by hand, just "X" and it skips it. Z or E will exists the
       transfer
       and close the connection.
       
       
       Speed can be improved by adding the following lines before the reget
       command:
       
           set reliable
           set window 32
           set receive packet-length 9024
       
       This improves performance because nowadays our networks are mostly
       reliable and
       fast. Kermit was designed at a time when serial line was used to
       transfer data.
       It's also reported that Kermit is in use in the ISS (International
       Space
       Station), I can't verify if it's still in use there.
       
       I never had any issue while transferring, even by getting a file by
       resuming it
       so many times or using a poor 4G hot-spot with 20s of latency.
       
       I did some tests and I get same performances than rsync over the
       Internet, it's
       a bit slower over Lan though.
       
       I only described an use case. Scripts can be made, there are a lot of
       others
       commands. You can type "help" in the kermit shell to get some hints for
       more
       help, "?" will display the command list.
       
       It can be used interactively, you can queue files by using "add" to
       create a
       send-list, and then proceed to transfer the queue.
       
       Another way to use it is to start the local kermit shell, then type
       "ssh
       user@remote-server" which will ssh into a remote box. Then you can type
       "kermit" and type kermit commands, this make a link between your local
       kermit
       and the remote one. You can go back to the local kermit by typing
       "Ctrl+\",
       and go back to the remote by entering the command "C".
       
       This is a piece of software I found by lurking into the ports tree for
       discovering new software and I felt in love with it. It's __really__
       reliable.
       
       It does a different job compared to rsync, I don't think it can
       preserve time,
       permissions etc... but it can be scripted completely, using parameters,
       and
       it's an awesome piece of software!
       
       It should support HTTP, HTTPS and ftp transfers too, as a client, but I
       did not
       get it work. On OpenBSD, the HTTPS support is disabled, it requires
       some work
       to switch to libreSSL.
       
       You can find information on the [official
       website](http://www.kermitproject.org).