
Some checks failed
CIFuzz / Fuzzing (push) Waiting to run
C/C++ CI self-hosted / win10 cygwin-release (push) Waiting to run
C/C++ CI self-hosted / ARM default (push) Waiting to run
C/C++ CI self-hosted / ARM64 default (push) Waiting to run
C/C++ CI self-hosted / alpine default (push) Waiting to run
C/C++ CI self-hosted / centos7 default (push) Waiting to run
C/C++ CI self-hosted / debian-i386 default (push) Waiting to run
C/C++ CI self-hosted / dfly30 default (push) Waiting to run
C/C++ CI self-hosted / dfly48 default (push) Waiting to run
C/C++ CI self-hosted / dfly60 default (push) Waiting to run
C/C++ CI self-hosted / dfly62 default (push) Waiting to run
C/C++ CI self-hosted / dfly64 default (push) Waiting to run
C/C++ CI self-hosted / fbsd10 default (push) Waiting to run
C/C++ CI self-hosted / fbsd12 default (push) Waiting to run
C/C++ CI self-hosted / fbsd13 default (push) Waiting to run
C/C++ CI self-hosted / fbsd14 default (push) Waiting to run
C/C++ CI self-hosted / nbsd10 default (push) Waiting to run
C/C++ CI self-hosted / nbsd3 default (push) Waiting to run
C/C++ CI self-hosted / nbsd4 default (push) Waiting to run
C/C++ CI self-hosted / nbsd8 default (push) Waiting to run
C/C++ CI self-hosted / nbsd9 default (push) Waiting to run
C/C++ CI self-hosted / obsd51 default (push) Waiting to run
C/C++ CI self-hosted / obsd67 default (push) Waiting to run
C/C++ CI self-hosted / obsd72 default (push) Waiting to run
C/C++ CI self-hosted / obsd73 default (push) Waiting to run
C/C++ CI self-hosted / obsd74 default (push) Waiting to run
C/C++ CI self-hosted / obsdsnap default (push) Waiting to run
C/C++ CI self-hosted / obsdsnap-i386 default (push) Waiting to run
C/C++ CI self-hosted / omnios default (push) Waiting to run
C/C++ CI self-hosted / openindiana default (push) Waiting to run
C/C++ CI self-hosted / ubuntu-2204 default (push) Waiting to run
C/C++ CI self-hosted / obsd-arm64 default (push) Waiting to run
C/C++ CI self-hosted / aix51 default (push) Waiting to run
C/C++ CI self-hosted / fbsd14-ppc64 default (push) Waiting to run
C/C++ CI self-hosted / sol10 default (push) Waiting to run
C/C++ CI self-hosted / sol11 default (push) Waiting to run
C/C++ CI self-hosted / win10 default (push) Waiting to run
C/C++ CI self-hosted / debian-riscv64 default (push) Waiting to run
C/C++ CI self-hosted / openwrt-mips default (push) Waiting to run
C/C++ CI self-hosted / openwrt-mipsel default (push) Waiting to run
C/C++ CI self-hosted / ARM64 pam (push) Waiting to run
C/C++ CI self-hosted / centos7 pam (push) Waiting to run
C/C++ CI self-hosted / debian-i386 pam (push) Waiting to run
C/C++ CI self-hosted / dfly48 pam (push) Waiting to run
C/C++ CI self-hosted / dfly58 pam (push) Waiting to run
C/C++ CI self-hosted / dfly60 pam (push) Waiting to run
C/C++ CI self-hosted / dfly62 pam (push) Waiting to run
C/C++ CI self-hosted / dfly64 pam (push) Waiting to run
C/C++ CI self-hosted / fbsd10 pam (push) Waiting to run
C/C++ CI self-hosted / fbsd12 pam (push) Waiting to run
C/C++ CI self-hosted / fbsd13 pam (push) Waiting to run
C/C++ CI self-hosted / fbsd14 pam (push) Waiting to run
C/C++ CI self-hosted / nbsd10 pam (push) Waiting to run
C/C++ CI self-hosted / nbsd8 pam (push) Waiting to run
C/C++ CI self-hosted / nbsd9 pam (push) Waiting to run
C/C++ CI self-hosted / omnios pam (push) Waiting to run
C/C++ CI self-hosted / openindiana pam (push) Waiting to run
C/C++ CI self-hosted / sol10 pam (push) Waiting to run
C/C++ CI self-hosted / sol11 pam-krb5 (push) Waiting to run
C/C++ CI self-hosted / sol11 sol64 (push) Waiting to run
C/C++ CI self-hosted / dfly30 without-openssl (push) Waiting to run
C/C++ CI / ubuntu-latest aws-lc (push) Failing after 31s
C/C++ CI / ubuntu-latest boringssl (push) Failing after 31s
C/C++ CI / ubuntu-latest clang-15 (push) Failing after 31s
C/C++ CI / ubuntu-latest clang-19 (push) Failing after 19s
C/C++ CI / ubuntu-latest default (push) Failing after 3s
C/C++ CI / ubuntu-latest gcc-14 (push) Failing after 4s
C/C++ CI / ubuntu-latest libressl-3.2.6 (push) Failing after 4s
C/C++ CI / ubuntu-latest libressl-3.3.6 (push) Failing after 3s
C/C++ CI / ubuntu-latest libressl-3.4.3 (push) Failing after 3s
C/C++ CI / ubuntu-latest libressl-3.5.3 (push) Failing after 4s
C/C++ CI / ubuntu-latest libressl-3.6.1 (push) Failing after 4s
C/C++ CI / ubuntu-latest libressl-3.7.2 (push) Failing after 4s
C/C++ CI / ubuntu-latest libressl-3.8.4 (push) Failing after 3s
C/C++ CI / ubuntu-latest libressl-3.9.2 (push) Failing after 3s
C/C++ CI / ubuntu-latest libressl-4.0.0 (push) Failing after 4s
C/C++ CI / ubuntu-latest libressl-master (push) Failing after 4s
C/C++ CI / ubuntu-latest musl (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-1.1.1 (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-1.1.1_stable (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-1.1.1t (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-1.1.1w (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-3.0 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-3.0.0 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-3.0.15 (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-3.1 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-3.1.0 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-3.1.7 (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-3.2 (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-3.2.3 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-3.3 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-3.3.2 (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-3.4.0 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-master (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-noec (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.71 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.72 (push) Failing after 3s
C/C++ CI / ubuntu-latest putty-0.73 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.74 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.75 (push) Failing after 3s
C/C++ CI / ubuntu-latest putty-0.76 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.77 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.78 (push) Failing after 3s
C/C++ CI / ubuntu-latest putty-0.79 (push) Failing after 3s
C/C++ CI / ubuntu-latest putty-0.80 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.81 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.82 (push) Failing after 3s
C/C++ CI / ubuntu-latest putty-0.83 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-snapshot (push) Failing after 4s
C/C++ CI / ubuntu-latest tcmalloc (push) Failing after 3s
C/C++ CI / ubuntu-latest zlib-develop (push) Failing after 3s
C/C++ CI / ubuntu-22.04 c89 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 clang-11 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 clang-12-Werror (push) Has been cancelled
C/C++ CI / ubuntu-22.04 clang-14 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 clang-sanitize-address (push) Has been cancelled
C/C++ CI / ubuntu-22.04 clang-sanitize-undefined (push) Has been cancelled
C/C++ CI / windows-2019 cygwin-release (push) Has been cancelled
C/C++ CI / windows-2022 cygwin-release (push) Has been cancelled
C/C++ CI / macos-13 default (push) Has been cancelled
C/C++ CI / macos-14 default (push) Has been cancelled
C/C++ CI / macos-15 default (push) Has been cancelled
C/C++ CI / ubuntu-22.04 default (push) Has been cancelled
C/C++ CI / ubuntu-22.04-arm default (push) Has been cancelled
C/C++ CI / ubuntu-24.04-arm default (push) Has been cancelled
C/C++ CI / windows-2019 default (push) Has been cancelled
C/C++ CI / windows-2022 default (push) Has been cancelled
C/C++ CI / ubuntu-22.04 gcc-11-Werror (push) Has been cancelled
C/C++ CI / ubuntu-22.04 gcc-12-Werror (push) Has been cancelled
C/C++ CI / ubuntu-22.04 gcc-9 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 gcc-sanitize-address (push) Has been cancelled
C/C++ CI / ubuntu-22.04 gcc-sanitize-undefined (push) Has been cancelled
C/C++ CI / ubuntu-22.04 hardenedmalloc (push) Has been cancelled
C/C++ CI / ubuntu-22.04 heimdal (push) Has been cancelled
C/C++ CI / ubuntu-22.04 kitchensink (push) Has been cancelled
C/C++ CI / ubuntu-22.04-arm kitchensink (push) Has been cancelled
C/C++ CI / ubuntu-24.04-arm kitchensink (push) Has been cancelled
C/C++ CI / ubuntu-22.04 krb5 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 libedit (push) Has been cancelled
C/C++ CI / macos-13 pam (push) Has been cancelled
C/C++ CI / macos-14 pam (push) Has been cancelled
C/C++ CI / macos-15 pam (push) Has been cancelled
C/C++ CI / ubuntu-22.04 pam (push) Has been cancelled
C/C++ CI / ubuntu-22.04 selinux (push) Has been cancelled
C/C++ CI / ubuntu-22.04 sk (push) Has been cancelled
C/C++ CI / ubuntu-22.04 valgrind-1 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 valgrind-2 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 valgrind-3 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 valgrind-4 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 valgrind-unit (push) Has been cancelled
C/C++ CI / ubuntu-22.04 without-openssl (push) Has been cancelled
311 lines
9.0 KiB
Groff
311 lines
9.0 KiB
Groff
.\" $OpenBSD: ssh-agent.1,v 1.82 2025/02/09 18:24:08 schwarze Exp $
|
|
.\"
|
|
.\" Author: Tatu Ylonen <ylo@cs.hut.fi>
|
|
.\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
|
.\" All rights reserved
|
|
.\"
|
|
.\" As far as I am concerned, the code I have written for this software
|
|
.\" can be used freely for any purpose. Any derived versions of this
|
|
.\" software must be clearly marked as such, and if the derived work is
|
|
.\" incompatible with the protocol description in the RFC file, it must be
|
|
.\" called by a name other than "ssh" or "Secure Shell".
|
|
.\"
|
|
.\" Copyright (c) 1999,2000 Markus Friedl. All rights reserved.
|
|
.\" Copyright (c) 1999 Aaron Campbell. All rights reserved.
|
|
.\" Copyright (c) 1999 Theo de Raadt. All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
.\"
|
|
.Dd $Mdocdate: February 9 2025 $
|
|
.Dt SSH-AGENT 1
|
|
.Os
|
|
.Sh NAME
|
|
.Nm ssh-agent
|
|
.Nd OpenSSH authentication agent
|
|
.Sh SYNOPSIS
|
|
.Nm ssh-agent
|
|
.Op Fl c | s
|
|
.Op Fl \&Dd
|
|
.Op Fl a Ar bind_address
|
|
.Op Fl E Ar fingerprint_hash
|
|
.Op Fl O Ar option
|
|
.Op Fl P Ar allowed_providers
|
|
.Op Fl t Ar life
|
|
.Nm ssh-agent
|
|
.Op Fl a Ar bind_address
|
|
.Op Fl E Ar fingerprint_hash
|
|
.Op Fl O Ar option
|
|
.Op Fl P Ar allowed_providers
|
|
.Op Fl t Ar life
|
|
.Ar command Op Ar arg ...
|
|
.Nm ssh-agent
|
|
.Op Fl c | s
|
|
.Fl k
|
|
.Sh DESCRIPTION
|
|
.Nm
|
|
is a program to hold private keys used for public key authentication.
|
|
Through use of environment variables the agent can be located
|
|
and automatically used for authentication when logging in to other
|
|
machines using
|
|
.Xr ssh 1 .
|
|
.Pp
|
|
The options are as follows:
|
|
.Bl -tag -width Ds
|
|
.It Fl a Ar bind_address
|
|
Bind the agent to the
|
|
.Ux Ns -domain
|
|
socket
|
|
.Ar bind_address .
|
|
The default is
|
|
.Pa $TMPDIR/ssh-XXXXXXXXXX/agent.\*(Ltppid\*(Gt .
|
|
.It Fl c
|
|
Generate C-shell commands on standard output.
|
|
This is the default if
|
|
.Ev SHELL
|
|
looks like it's a csh style of shell.
|
|
.It Fl D
|
|
Foreground mode.
|
|
When this option is specified,
|
|
.Nm
|
|
will not fork.
|
|
.It Fl d
|
|
Debug mode.
|
|
When this option is specified,
|
|
.Nm
|
|
will not fork and will write debug information to standard error.
|
|
.It Fl E Ar fingerprint_hash
|
|
Specifies the hash algorithm used when displaying key fingerprints.
|
|
Valid options are:
|
|
.Dq md5
|
|
and
|
|
.Dq sha256 .
|
|
The default is
|
|
.Dq sha256 .
|
|
.It Fl k
|
|
Kill the current agent (given by the
|
|
.Ev SSH_AGENT_PID
|
|
environment variable).
|
|
.It Fl O Ar option
|
|
Specify an option when starting
|
|
.Nm .
|
|
The supported options are:
|
|
.Cm allow-remote-pkcs11 ,
|
|
.Cm no-restrict-websafe
|
|
and
|
|
.Cm websafe-allow .
|
|
.Pp
|
|
The
|
|
.Cm allow-remote-pkcs11
|
|
option allows clients of a forwarded
|
|
.Nm
|
|
to load PKCS#11 or FIDO provider libraries.
|
|
By default only local clients may perform this operation.
|
|
Note that signalling that an
|
|
.Nm
|
|
client is remote is performed by
|
|
.Xr ssh 1 ,
|
|
and use of other tools to forward access to the agent socket may circumvent
|
|
this restriction.
|
|
.Pp
|
|
The
|
|
.Cm no-restrict-websafe
|
|
option instructs
|
|
.Nm
|
|
to permit signatures using FIDO keys that might be web authentication
|
|
requests.
|
|
By default,
|
|
.Nm
|
|
refuses signature requests for FIDO keys where the key application string
|
|
does not start with
|
|
.Dq ssh:
|
|
and when the data to be signed does not appear to be a
|
|
.Xr ssh 1
|
|
user authentication request or a
|
|
.Xr ssh-keygen 1
|
|
signature.
|
|
The default behaviour prevents forwarded access to a FIDO key from also
|
|
implicitly forwarding the ability to authenticate to websites.
|
|
.Pp
|
|
Alternately the
|
|
.Cm websafe-allow
|
|
option allows specifying a pattern-list of key application strings to
|
|
replace the default application allow-list, for example:
|
|
.Dq websafe-allow=ssh:*,example.org,*.example.com
|
|
.Pp
|
|
See PATTERNS in
|
|
.Xr ssh_config 5
|
|
for a description of pattern-list syntax.
|
|
.It Fl P Ar allowed_providers
|
|
Specify a pattern-list of acceptable paths for PKCS#11 provider and FIDO
|
|
authenticator middleware shared libraries that may be used with the
|
|
.Fl S
|
|
or
|
|
.Fl s
|
|
options to
|
|
.Xr ssh-add 1 .
|
|
Libraries that do not match the pattern list will be refused.
|
|
The default list is
|
|
.Dq usr/lib*/*,/usr/local/lib*/* .
|
|
.Pp
|
|
See PATTERNS in
|
|
.Xr ssh_config 5
|
|
for a description of pattern-list syntax.
|
|
.It Fl s
|
|
Generate Bourne shell commands on standard output.
|
|
This is the default if
|
|
.Ev SHELL
|
|
does not look like it's a csh style of shell.
|
|
.It Fl t Ar life
|
|
Set a default value for the maximum lifetime of identities added to the agent.
|
|
The lifetime may be specified in seconds or in a time format specified in
|
|
.Xr sshd_config 5 .
|
|
A lifetime specified for an identity with
|
|
.Xr ssh-add 1
|
|
overrides this value.
|
|
Without this option the default maximum lifetime is forever.
|
|
.It Ar command Op Ar arg ...
|
|
If a command (and optional arguments) is given,
|
|
this is executed as a subprocess of the agent.
|
|
The agent exits automatically when the command given on the command
|
|
line terminates.
|
|
.El
|
|
.Pp
|
|
There are three main ways to get an agent set up.
|
|
The first is at the start of an X session,
|
|
where all other windows or programs are started as children of the
|
|
.Nm
|
|
program.
|
|
The agent starts a command under which its environment
|
|
variables are exported, for example
|
|
.Cm ssh-agent xterm & .
|
|
When the command terminates, so does the agent.
|
|
.Pp
|
|
The second method is used for a login session.
|
|
When
|
|
.Nm
|
|
is started,
|
|
it prints the shell commands required to set its environment variables,
|
|
which in turn can be evaluated in the calling shell, for example
|
|
.Cm eval `ssh-agent -s` .
|
|
.Pp
|
|
In both of these cases,
|
|
.Xr ssh 1
|
|
looks at these environment variables
|
|
and uses them to establish a connection to the agent.
|
|
.Pp
|
|
The third way to run
|
|
.Nm
|
|
is via socket activation from a supervising process, such as systemd.
|
|
In this mode, the supervising process creates the listening socket and
|
|
is responsible for starting
|
|
.Nm
|
|
as needed, and also for communicating the location of the socket listener
|
|
to other programs in the user's session.
|
|
Socket activation is used when
|
|
.Nm
|
|
is started with either of the
|
|
.Fl d
|
|
or
|
|
.Fl D
|
|
flags, no socket listening address specified by the
|
|
.Fl a
|
|
flag, and both the
|
|
.Ev LISTEN_FDS
|
|
and
|
|
.Ev LISTEN_PID
|
|
environment variables correctly supplied by the supervising process.
|
|
.Pp
|
|
The agent initially does not have any private keys.
|
|
Keys are added using
|
|
.Xr ssh-add 1
|
|
or by
|
|
.Xr ssh 1
|
|
when
|
|
.Cm AddKeysToAgent
|
|
is set in
|
|
.Xr ssh_config 5 .
|
|
Multiple identities may be stored in
|
|
.Nm
|
|
concurrently and
|
|
.Xr ssh 1
|
|
will automatically use them if present.
|
|
.Xr ssh-add 1
|
|
is also used to remove keys from
|
|
.Nm
|
|
and to query the keys that are held in one.
|
|
.Pp
|
|
Connections to
|
|
.Nm
|
|
may be forwarded from further remote hosts using the
|
|
.Fl A
|
|
option to
|
|
.Xr ssh 1
|
|
(but see the caveats documented therein),
|
|
avoiding the need for authentication data to be stored on other machines.
|
|
Authentication passphrases and private keys never go over the network:
|
|
the connection to the agent is forwarded over SSH remote connections
|
|
and the result is returned to the requester,
|
|
allowing the user access to their identities anywhere in the network
|
|
in a secure fashion.
|
|
.Pp
|
|
.Nm
|
|
will delete all keys it has loaded upon receiving
|
|
.Dv SIGUSR1 .
|
|
.Sh ENVIRONMENT
|
|
.Bl -tag -width "SSH_AGENT_PID"
|
|
.It Ev SSH_AGENT_PID
|
|
When
|
|
.Nm
|
|
starts, it stores the name of the agent's process ID (PID) in this variable.
|
|
.It Ev SSH_AUTH_SOCK
|
|
When
|
|
.Nm
|
|
starts, it creates a
|
|
.Ux Ns -domain
|
|
socket and stores its pathname in this variable.
|
|
It is accessible only to the current user,
|
|
but is easily abused by root or another instance of the same user.
|
|
.El
|
|
.Sh FILES
|
|
.Bl -tag -width Ds
|
|
.It Pa $TMPDIR/ssh-XXXXXXXXXX/agent.<ppid>
|
|
.Ux Ns -domain
|
|
sockets used to contain the connection to the authentication agent.
|
|
These sockets should only be readable by the owner.
|
|
The sockets should get automatically removed when the agent exits.
|
|
.El
|
|
.Sh SEE ALSO
|
|
.Xr ssh 1 ,
|
|
.Xr ssh-add 1 ,
|
|
.Xr ssh-keygen 1 ,
|
|
.Xr ssh_config 5 ,
|
|
.Xr sshd 8
|
|
.Sh AUTHORS
|
|
.An -nosplit
|
|
OpenSSH is a derivative of the original and free ssh 1.2.12 release by
|
|
.An Tatu Ylonen .
|
|
.An Aaron Campbell , Bob Beck , Markus Friedl , Niels Provos , Theo de Raadt
|
|
and
|
|
.An Dug Song
|
|
removed many bugs, re-added newer features and created OpenSSH.
|
|
.An Markus Friedl
|
|
contributed the support for SSH protocol versions 1.5 and 2.0.
|