SSH est fournit en deux variantes. Le vieux protocole 1 existe en deux variantes majeures : le protocole 1.3 et le protocole 1.5. Les deux sont supportés par OpenSSH. De plus, les deux nécessitent l'utilisation de l'algorithme de cryptographie asymétrique RSA (dont le brevet a expiré aux USA, permettant l'usage par tout le monde) pour la négociation des clés et une courte liste d'algorithmes symétriques pour le chiffrement proprement dit : 3DES et Blowfish (il y en eu quelques autres mais ils avaient des problèmes de sécurité). Quelques mises en oeuvre de ssh1 ont aussi utilisé l'algorithme symétrique IDEA mais étant donné qu'il est breveté dans certains pays et que les deux autres algorithmes fournis sont suffisant, OpenSSH ne l'inclut pas.
Le protocole SSH 1 n'utilise qu'un simple CRC (Cyclic Redundancy Check) pour vérifier l'intégrité des données, ce qui n'est pas suffisant, une attaque par insertion est possible, cependant, vu le nombre de rustines qui ont été mises sur ssh au fur et à mesure des années, les attaques contre celui-ci sont très difficiles à réaliser. Quand l'algorithme 3DES est utilisé, cette attaque par insertion n'est pas possible.
L'autre variante de SSH est le protocole en version 2. Ce protocole a été inventé de façon à éviter les problèmes de brevet avec RSA (problème de brevet qui n'est plus d'actualité, étant donné que le brevet a expiré) et corrige le problème de contrôle d'intégrité CRC que l'on trouve dans le protocole 1. En utilisant les algorithmes asymétriques DSA et DH, le protocole 2 évite les brevets. Le problème du CRC est résolu en utilisant un véritable algorithme HMAC.
Le code d'OpenSSH incluant le support pour les protocoles 1.3 et 1.5 est sorti le premier décembre 1999.
Pour la plupart de ses fonctionnalités cryptographiques, OpenSSH s'appuie sur la bibliothèque non GPL OpenSSL.
Juste après que nous ayons fini notre mise en oeuvre du protocole 1, divers groupes non-OpenBSD se sont montrés particulièrement intéressés. Damien Miller, Philipp Hands et une poignée d'autres ont commencé à porter OpenSSH sur Linux et d'autres systèmes d'exploitation Unix. Depuis le début de nos efforts, nous avons bien senti que le code originel de ssh était trop compliqué, il devait gérer trop de dépendances. Notre approche visant à écrire du code sur et robuste ne nous a pas permis de gérer de telles différences. Donc pour rendre le processus de développement plus simple pour tous, nous avons décider de séparer les efforts de développements centraux du développement de la portabilité. Cela a très bien fonctionné pour nous. (Comparez juste le nombre de ligne de code entre la version de base et la version portable).
Depuis, les membres du projet OpenBSD qui travaille sur OpenSSH ont poussé le support du développement du protocole 2. Depuis le 4 mai 2000, le protocole 2 est totalement supporté.
Donc, depuis le 4 Mai 2000, OpenSSH fourni le support du protocole 2. Mais étant donné que les clients et serveurs utilisant le protocole 1 sont plus populaires sur l'Internet, nous continuons de supporter le protocole 1.