Terms & Definitions
There are lots of overlapping ideas and terms in SSH, complicated by differing usage among various implementations. For definiteness, we use the following terms. You may disagree with our choices, but you didn't have to write a 500-page book talking about all this stuff and try to avoid confusion.
- SCS -- SSH Communications Security, Inc. Founded by Tatu Ylönen, the inventor of SSH, who now serves as the company's CTO.
- SSH-1 -- version 1 of the SSH protocol, as documented in the early draft RFC written by Tatu Ylönen and distributed with SCS's SSH-1 implementation. Generally means either versions 1.3 or 1.5.
- SSH-2 -- version 2 of the SSH protocol, as documented in the draft standards produced by the SECSH working group of the IETF. Has superceded SSH-1, but the latter remains in common use due to historical licensing restrictions on the use of available SSH-2 implementations.
- SSH1 -- The SSH-1 implementation from SCS, based on the original SSH by Tatu Ylönen before he founded SCS to commercialize his work. Still distributed and maintained by SCS, though not actively developed (bug fixes only).
- SSH2 -- The SSH-2 implementation from SCS. Written entirely from scratch and not based on the SSH1 code. SSH-2 is a commercial product, but is available free for use by qualifying government, educational, and non-profit entities, as well as by independent contractors working for such entities. It is also freely usable on several free OS's (e.g. Linux, OpenBSD, NetBSD, FreeBSD) in any context, including commercial ones. See SCS's licensing terms for details.
- OpenSSH -- A free SSH implementation sponsored by the OpenBSD Project. Early versions of Ylönen's SSH1 bore free usage terms; OpenSSH was based on the last such, but has evolved significantly since then. OpenSSH supports both SSH-1 and SSH-2 in a single set of programs, rather than the split package compatibility approached used by SSH2. The SSH-2 support is incomplete at the moment, but development is rapid and that probably won't be true for much longer. OpenSSH is to a large extent the work of Markus Friedl.
- OpenSSH/1 -- OpenSSH, when referring specifically to its SSH-1 support and behavior.
- OpenSSH/2 -- OpenSSH, when referring specifically to its SSH-2 support and behavior.
- trusted-host authentication -- The general idea of user
authentication by having the server trust the client OS's authentication
of the requesting user. Thus, we replace authentication of the requesting
user with authentication of the client host. The traditional method used
by the Berkeley r-commands (rsh, rlogin, etc.) is weak
trusted-host authentication: the client host is identified merely
using its IP address and the naming server (DNS, NIS,
/etc/hosts
, etc.). SSH-1 supports this method ("Rhosts") for backward compatibility, as well as a stronger version called "RhostsRSA", which authenticates the client host cryptographically using its SSH host key. The SSH-2 protocol supports this style as well, called "hostbased" authentication. It does not support weak trusted-host authentication, on security grounds. - man-in-the-middle attack -- an attack on a protocol in which Attila the attacker controls the communications channel between legitimate speakers Ted and Alice, and can delete or insert messages at will. Attila intercepts all protocol messages, masquerading as Ted to Alice, and as Alice to Ted. Ted and Alice each believe they are negotiating encryption keys with the other, but in fact they are both negotiating them with Attila instead. Once the session is established, Attila receives messages, decrypts them, re-encrypts them with the other side's key, and sends them along.