Le protocole SSH est disponible dans deux versions incompatibles : SSH 1 et SSH 2.
SSH 1 se décline en deux sous-variantes : les protocoles 1.3 et 1.5. Les deux sont supportés par OpenSSH. Ils nécessitent l'utilisation de l'algorithme de chiffrement asymétrique RSA (dont le brevet a expiré aux Etats-Unis d'Amérique, permettant son usage par tout le monde) pour l'échange des clés et une courte liste d'algorithmes symétriques pour le chiffrement proprement dit : 3DES et Blowfish (il y en a eu d'autres comme RC4 mais ils avaient des problèmes de sécurité). Quelques mises en oeuvre de SSH 1 ont également utilisé l'algorithme symétrique IDEA mais comme il est breveté dans certains pays et que les deux autres algorithmes fournis suffisent, OpenSSH ne l'utilise pas.
Le protocole SSH 1 n'utilise qu'un simple contrôle CRC (Cyclic Redundancy Check) pour valider l'intégrité des données, ce qui n'est pas suffisant. Même si une attaque par insertion est possible, celle-ci est très difficile à réaliser compte-tenu du nombre de rustines qui ont été appliquées sur les mises en oeuvre de SSH au cours des années. L'utilisation de l'algorithme 3DES rend également cette attaque par insertion difficilement possible (nous allons résoudre ce problème bientôt).
La deuxième variante majeure de SSH met en oeuvre le protocole SSH 2. Ce protocole a été inventé de façon à éviter les problèmes de brevet avec RSA (problèmes qui ne sont plus d'actualité depuis que le brevet a expiré). Il corrige également le problème de contrôle d'intégrité CRC du protocole 1 en utilisant les algorithmes asymétriques DSA et DH, le protocole SSH 2 ne repose sur aucun brevet. Le problème du CRC est résolu en utilisant un véritable algorithme HMAC. Le protocole SSH 2 supporte aussi un grand nombre de d'algorithmes symétriques et de nouvelles fonctionnalités.
La version d'OpenSSH supportant les protocoles SSH 1.3 et 1.5 a été mise à disposition le 1er décembre 1999.
Pour la plupart de ses fonctionnalités cryptographiques, OpenSSH s'appuie sur la bibliothèque non GPL OpenSSL.
Juste après la fin de notre mise en oeuvre du protocole SSH 1, divers groupes non-OpenBSD se sont particulièrement intéressés à OpenSSH. Damien Miller, Philipp Hands et une poignée d'autres développeurs 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é et qu'il devait gérer trop de dépendances. Notre approche visant à écrire du code sûr et robuste ne nous a pas permis de gérer de telles différences. C'est la raison pour laquelle nous avons décider de séparer les efforts de développements centraux du développement de la portabilité pour rendre le processus de développement plus simple pour tous. Cela a très bien fonctionné pour nous (comparez le nombre de lignes de code entre la version de base et la version portable).
Les membres du projet OpenBSD ont continué dans cette voie afin de supporter le protocole SSH 2. Ce travail a été réalisé en grande partie par Markus Friedl. Le 4 mai 2000, la mise en oeuvre du protocole SSH 2 était suffisamment correcte pour être utilisable.