Kermit (and its main implementation in ckermit) is:

  • A file transfer protocol for running over serial lines, Modems, or TCP/IP. The protocol is quite flexible, supporting everything from tiny embedded devices with 90-byte packets to streaming over ssh.
  • A FTP- or SFTP-like system-agnostic protocol for looking at directories of files on remote systems, renaming files, deleting them, etc. with a standard process.
  • Capable of operating under extremely challenging conditions, including 7-bit connections, connections that otherwise “eat” certain characters, very slow or lossy connections (such as LoRa radios).
  • A modem dialer.
  • A fully-functional standalone TCP server.
  • A system for inband communication over a single connection.
  • On Windows, a terminal emulator. (On Linux, it runs within a terminal emulator already, so doesn’t need to provide that functionality).
  • A thin wrapper around ssh providing new features. See Kermit as a ssh wrapper.
  • A scripting engine, which can be used to automate terminal interaction, file transfer, and more. It is something like a more powerful version of expect. There are some pretty neat kermit scripts out there - everything from renaming JPEGs based on embedded metadata to budgeting.
  • It’s also a Telnet, SSH, FTP, and HTTP(S) client.

You can download kermit for dozens of platforms, many of which are decades out of date. They all interoperate. It is rather impressive. In fact, a new version of Kermit for TOPS-20 was released in June 2023! (TOPS-20 was active between 1976 and 1988).

There are many Kermit implementations; this page is primarily about CKermit, the most up-to-date and featureful implementation for *nix. For many years, CKermit wasn’t fully open-source, but since 2011, has been released under a BSD license.

I operate the quux.org Kermit Server - open to the public for you to experiment with!

Check out the Kermit introduction and tour for more details about the program.

Kermit is an example of Old and Small Technology. I wrote about it in Try the Last Internet Kermit Server.

Using Kermit

  • Kermit modes covers the command and connect modes of Kermit, and is good background for understanding how it works.
  • Kermit as a ssh wrapper covers how Kermit can make ssh much more convenient.

Kermit in Kermit

You can of course do something like this:

  1. Fire up local kermit
  2. Run ssh hostname
  3. While you’re in ssh over there, fire up kermit on the remote. Now, when you’re in connect mode, you’re sending commands to the remote kermit, and when you’re in command mode, you’re sending commands to the local kermit. Potentially confusing – and also potentially useful.

This is what you will encounter if you use the quux.org Kermit Server - try it out!

Performance

These settings make kermit fast over a reliable (ssh, etc) connection. You can add them to your ~/.kermrc if you never need to use unreliable serial links:

set reliable on
set clearchannel on
set receive packet-length 9000
set window 32
set control unprefix all
set transfer slow-start off

Security

The kermit protocol, by default, can work in either direction.

If you connect to untrusted remote systems, I recommend running disable all to prevent the remote from doing much to your local system other than sending files. For instance, rcd is enabled by default and allows the remote to change the directory for you to receive files.

Further reading


I (John Goerzen) maintain a number of archives and mirrors, with a particular emphasis on material important to computing history.

Sometimes we want better-than-firewall security for things. For instance:

What is this mysterious protocol? Who uses it and what is its story?

This is a Kermit server maintained by me, John Goerzen.

The old sense of the word “modem” in computing referred to a device that would let two computers communicate over telephone lines. It was quite slow and unreliable by modern standards. Nowadays, the term is more broad.

Old technology is any tech that’s, well… old.

Here, in classic Goerzen deep dive fashion, is more information than you knew you wanted about a topic you’ve probably never thought of. I found it pretty interesting, because it took me down a rabbit hole of subsystems I’ve never worked with much and a mishmash of 1980s and 2020s tech.

This page will describe how to run an Internet Kermit server, like the quux.org Kermit Server that was featured in my article Try the Last Internet Kermit Server.

Kermit has these modes:

Kermit makes a nice wrapper around ssh, allowing in-band file transfers. This can be very handy.