This is the port of OpenBSD's excellent OpenSSH to Linux and other
Unices.

OpenSSH is based on the last free version of Tatu Ylonen's SSH with
all patent-encumbered algorithms removed, all known security bugs
fixed, new features reintroduced and many other clean-ups. More
information about SSH itself can be found in the file README.Ylonen.
OpenSSH has been created by Aaron Campbell, Bob Beck, Markus Friedl,
Niels Provos, Theo de Raadt, and Dug Song. It has a homepage at
http://www.openssh.com/

This port consists of the re-introduction of autoconf support, PAM
support (for Linux and Solaris), EGD[1] support, and replacements
for OpenBSD library functions that are (regrettably) absent from
other unices. This port has been best tested on Linux, though some
Solaris support is beginning to filter in. This version actively
tracks changes in the OpenBSD CVS repository.

The PAM support is now more functional than the popular packages of
commercial ssh-1.2.x. It checks "account" and "session" modules for
all logins, not just when using password authentication.

All new code is released under a XFree style license, which is very
liberal. Please refer to the source files for details. The code in
bsd-*.[ch] is from the OpenBSD project and has its own license (again,
see the source files for details).

OpenSSH depends on Zlib[2], OpenSSL[3] and optionally PAM[4]. To build
the GNOME[5] pass-phrase requester (--with-gnome-askpass), you will
need the GNOME libraries installed. If you are building OpenSSH on a
Unix which lacks a kernel random number pool (/dev/random), you will
need to install EGD[1].

There is now a mailing list for this port of OpenSSH. To
subscribe, send a message consisting of the word 'SUBSCRIBE' to
openssh-unix-dev-request@mindrot.org. This mailing list is intended
for developers who wish to improve on this port or extend it to other
Unices.

Please refer to the INSTALL document for information on how to install
OpenSSH on your system.

This patch is developed primarily on Linux, but I am including patches
which improve compatability with other unices. The beginnings of
Solaris support have already been included.

Damien Miller <djm@ibs.com.au>
Internet Business Solutions

Credits - 

Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, 
Theo de Raadt, and Dug Song - Creators of OpenSSH
'jonchen' - the original author of PAM support of SSH
Ben Taylor <bent@clark.net> - Solaris debugging and fixes
Chip Salzenberg <chip@valinux.com> - Assorted patches
Chris Saia <csaia@wtower.com> - SuSE packaging
Dan Brosemer <odin@linuxfreak.com> - Autoconf and build fixes & Debian scripts
Jim Knoble <jmknoble@pobox.com> - RPM spec file fixes
Marc G. Fournier <marc.fournier@acadiau.ca> - Solaris patches
Nalin Dahyabhai <nalin.dahyabhai@pobox.com> - PAM environment patch
Niels Kristian Bech Jensen <nkbj@image.dk> - Assorted patches
Phil Hands <phil@hands.com> - Debian scripts, assorted patches
Thomas Neumann <tom@smart.ruhr.de> - Shadow passwords
Tudor Bosman <tudorb@jm.nu> - MD5 password support

Miscellania - 

This version of SSH is based upon code retrieved from the OpenBSD CVS
repository on 1999-11-09 which in turn was based on the last free 
version of SSH released by Tatu Ylonen.

Code in helper.[ch] and gnome-ssh-askpass.c is Copyright 1999 
Internet Business Solutions and is released under a X11-style 
license (see source files for details).

(A)RC4 code in rc4.[ch] is Copyright 1999 Damien Miller. It too is
under a X11-style license (see source file for details).

References -

[1] http://www.lothar.com/tech/crypto/
[2] http://www.cdrom.com/pub/infozip/zlib/
[3] http://www.openssl.org/
[4] http://www.kernel.org/pub/linux/libs/pam/ (PAM is standard on Solaris)
[5] http://www.gnome.org/

