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). |