xref: /freebsd/crypto/openssh/sshd.8 (revision dd41de95a84d979615a2ef11df6850622bf6184e)
1.\"
2.\" Author: Tatu Ylonen <ylo@cs.hut.fi>
3.\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
4.\"                    All rights reserved
5.\"
6.\" As far as I am concerned, the code I have written for this software
7.\" can be used freely for any purpose.  Any derived versions of this
8.\" software must be clearly marked as such, and if the derived work is
9.\" incompatible with the protocol description in the RFC file, it must be
10.\" called by a name other than "ssh" or "Secure Shell".
11.\"
12.\" Copyright (c) 1999,2000 Markus Friedl.  All rights reserved.
13.\" Copyright (c) 1999 Aaron Campbell.  All rights reserved.
14.\" Copyright (c) 1999 Theo de Raadt.  All rights reserved.
15.\"
16.\" Redistribution and use in source and binary forms, with or without
17.\" modification, are permitted provided that the following conditions
18.\" are met:
19.\" 1. Redistributions of source code must retain the above copyright
20.\"    notice, this list of conditions and the following disclaimer.
21.\" 2. Redistributions in binary form must reproduce the above copyright
22.\"    notice, this list of conditions and the following disclaimer in the
23.\"    documentation and/or other materials provided with the distribution.
24.\"
25.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
26.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
27.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
28.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
29.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
30.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35.\"
36.\" $OpenBSD: sshd.8,v 1.304 2018/07/22 12:16:59 dtucker Exp $
37.\" $FreeBSD$
38.Dd $Mdocdate: July 22 2018 $
39.Dt SSHD 8
40.Os
41.Sh NAME
42.Nm sshd
43.Nd OpenSSH SSH daemon
44.Sh SYNOPSIS
45.Nm sshd
46.Bk -words
47.Op Fl 46DdeiqTt
48.Op Fl C Ar connection_spec
49.Op Fl c Ar host_certificate_file
50.Op Fl E Ar log_file
51.Op Fl f Ar config_file
52.Op Fl g Ar login_grace_time
53.Op Fl h Ar host_key_file
54.Op Fl o Ar option
55.Op Fl p Ar port
56.Op Fl u Ar len
57.Ek
58.Sh DESCRIPTION
59.Nm
60(OpenSSH Daemon) is the daemon program for
61.Xr ssh 1 .
62Together these programs replace rlogin and rsh,
63and provide secure encrypted communications between two untrusted hosts
64over an insecure network.
65.Pp
66.Nm
67listens for connections from clients.
68It is normally started at boot from
69.Pa /etc/rc.d/sshd .
70It forks a new
71daemon for each incoming connection.
72The forked daemons handle
73key exchange, encryption, authentication, command execution,
74and data exchange.
75.Pp
76.Nm
77can be configured using command-line options or a configuration file
78(by default
79.Xr sshd_config 5 ) ;
80command-line options override values specified in the
81configuration file.
82.Nm
83rereads its configuration file when it receives a hangup signal,
84.Dv SIGHUP ,
85by executing itself with the name and options it was started with, e.g.\&
86.Pa /usr/sbin/sshd .
87.Pp
88The options are as follows:
89.Bl -tag -width Ds
90.It Fl 4
91Forces
92.Nm
93to use IPv4 addresses only.
94.It Fl 6
95Forces
96.Nm
97to use IPv6 addresses only.
98.It Fl C Ar connection_spec
99Specify the connection parameters to use for the
100.Fl T
101extended test mode.
102If provided, any
103.Cm Match
104directives in the configuration file that would apply are applied before the
105configuration is written to standard output.
106The connection parameters are supplied as keyword=value pairs and may be
107supplied in any order, either with multiple
108.Fl C
109options or as a comma-separated list.
110The keywords are
111.Dq addr,
112.Dq user ,
113.Dq host ,
114.Dq laddr ,
115.Dq lport ,
116and
117.Dq rdomain
118and correspond to source address, user, resolved source host name,
119local address, local port number and routing domain respectively.
120.It Fl c Ar host_certificate_file
121Specifies a path to a certificate file to identify
122.Nm
123during key exchange.
124The certificate file must match a host key file specified using the
125.Fl h
126option or the
127.Cm HostKey
128configuration directive.
129.It Fl D
130When this option is specified,
131.Nm
132will not detach and does not become a daemon.
133This allows easy monitoring of
134.Nm sshd .
135.It Fl d
136Debug mode.
137The server sends verbose debug output to standard error,
138and does not put itself in the background.
139The server also will not fork and will only process one connection.
140This option is only intended for debugging for the server.
141Multiple
142.Fl d
143options increase the debugging level.
144Maximum is 3.
145.It Fl E Ar log_file
146Append debug logs to
147.Ar log_file
148instead of the system log.
149.It Fl e
150Write debug logs to standard error instead of the system log.
151.It Fl f Ar config_file
152Specifies the name of the configuration file.
153The default is
154.Pa /etc/ssh/sshd_config .
155.Nm
156refuses to start if there is no configuration file.
157.It Fl g Ar login_grace_time
158Gives the grace time for clients to authenticate themselves (default
159120 seconds).
160If the client fails to authenticate the user within
161this many seconds, the server disconnects and exits.
162A value of zero indicates no limit.
163.It Fl h Ar host_key_file
164Specifies a file from which a host key is read.
165This option must be given if
166.Nm
167is not run as root (as the normal
168host key files are normally not readable by anyone but root).
169The default is
170.Pa /etc/ssh/ssh_host_ecdsa_key ,
171.Pa /etc/ssh/ssh_host_ed25519_key
172and
173.Pa /etc/ssh/ssh_host_rsa_key .
174It is possible to have multiple host key files for
175the different host key algorithms.
176.It Fl i
177Specifies that
178.Nm
179is being run from
180.Xr inetd 8 .
181.It Fl o Ar option
182Can be used to give options in the format used in the configuration file.
183This is useful for specifying options for which there is no separate
184command-line flag.
185For full details of the options, and their values, see
186.Xr sshd_config 5 .
187.It Fl p Ar port
188Specifies the port on which the server listens for connections
189(default 22).
190Multiple port options are permitted.
191Ports specified in the configuration file with the
192.Cm Port
193option are ignored when a command-line port is specified.
194Ports specified using the
195.Cm ListenAddress
196option override command-line ports.
197.It Fl q
198Quiet mode.
199Nothing is sent to the system log.
200Normally the beginning,
201authentication, and termination of each connection is logged.
202.It Fl T
203Extended test mode.
204Check the validity of the configuration file, output the effective configuration
205to stdout and then exit.
206Optionally,
207.Cm Match
208rules may be applied by specifying the connection parameters using one or more
209.Fl C
210options.
211.It Fl t
212Test mode.
213Only check the validity of the configuration file and sanity of the keys.
214This is useful for updating
215.Nm
216reliably as configuration options may change.
217.It Fl u Ar len
218This option is used to specify the size of the field
219in the
220.Li utmp
221structure that holds the remote host name.
222If the resolved host name is longer than
223.Ar len ,
224the dotted decimal value will be used instead.
225This allows hosts with very long host names that
226overflow this field to still be uniquely identified.
227Specifying
228.Fl u0
229indicates that only dotted decimal addresses
230should be put into the
231.Pa utmp
232file.
233.Fl u0
234may also be used to prevent
235.Nm
236from making DNS requests unless the authentication
237mechanism or configuration requires it.
238Authentication mechanisms that may require DNS include
239.Cm HostbasedAuthentication
240and using a
241.Cm from="pattern-list"
242option in a key file.
243Configuration options that require DNS include using a
244USER@HOST pattern in
245.Cm AllowUsers
246or
247.Cm DenyUsers .
248.El
249.Sh AUTHENTICATION
250The OpenSSH SSH daemon supports SSH protocol 2 only.
251Each host has a host-specific key,
252used to identify the host.
253Whenever a client connects, the daemon responds with its public
254host key.
255The client compares the
256host key against its own database to verify that it has not changed.
257Forward security is provided through a Diffie-Hellman key agreement.
258This key agreement results in a shared session key.
259The rest of the session is encrypted using a symmetric cipher, currently
260128-bit AES, Blowfish, 3DES, CAST128, Arcfour, 192-bit AES, or 256-bit AES.
261The client selects the encryption algorithm
262to use from those offered by the server.
263Additionally, session integrity is provided
264through a cryptographic message authentication code
265(hmac-md5, hmac-sha1, umac-64, umac-128,
266hmac-sha2-256 or hmac-sha2-512).
267.Pp
268Finally, the server and the client enter an authentication dialog.
269The client tries to authenticate itself using
270host-based authentication,
271public key authentication,
272challenge-response authentication,
273or password authentication.
274.Pp
275Regardless of the authentication type, the account is checked to
276ensure that it is accessible.  An account is not accessible if it is
277locked, listed in
278.Cm DenyUsers
279or its group is listed in
280.Cm DenyGroups
281\&.  The definition of a locked account is system dependent. Some platforms
282have their own account database (eg AIX) and some modify the passwd field (
283.Ql \&*LK\&*
284on Solaris and UnixWare,
285.Ql \&*
286on HP-UX, containing
287.Ql Nologin
288on Tru64,
289a leading
290.Ql \&*LOCKED\&*
291on FreeBSD and a leading
292.Ql \&!
293on most Linuxes).
294If there is a requirement to disable password authentication
295for the account while allowing still public-key, then the passwd field
296should be set to something other than these values (eg
297.Ql NP
298or
299.Ql \&*NP\&*
300).
301.Pp
302If the client successfully authenticates itself, a dialog for
303preparing the session is entered.
304At this time the client may request
305things like allocating a pseudo-tty, forwarding X11 connections,
306forwarding TCP connections, or forwarding the authentication agent
307connection over the secure channel.
308.Pp
309After this, the client either requests a shell or execution of a command.
310The sides then enter session mode.
311In this mode, either side may send
312data at any time, and such data is forwarded to/from the shell or
313command on the server side, and the user terminal in the client side.
314.Pp
315When the user program terminates and all forwarded X11 and other
316connections have been closed, the server sends command exit status to
317the client, and both sides exit.
318.Sh LOGIN PROCESS
319When a user successfully logs in,
320.Nm
321does the following:
322.Bl -enum -offset indent
323.It
324If the login is on a tty, and no command has been specified,
325prints last login time and
326.Pa /etc/motd
327(unless prevented in the configuration file or by
328.Pa ~/.hushlogin ;
329see the
330.Sx FILES
331section).
332.It
333If the login is on a tty, records login time.
334.It
335Checks
336.Pa /etc/nologin and
337.Pa /var/run/nologin ;
338if one exists, it prints the contents and quits
339(unless root).
340.It
341Changes to run with normal user privileges.
342.It
343Sets up basic environment.
344.It
345Reads the file
346.Pa ~/.ssh/environment ,
347if it exists, and users are allowed to change their environment.
348See the
349.Cm PermitUserEnvironment
350option in
351.Xr sshd_config 5 .
352.It
353Changes to user's home directory.
354.It
355If
356.Pa ~/.ssh/rc
357exists and the
358.Xr sshd_config 5
359.Cm PermitUserRC
360option is set, runs it; else if
361.Pa /etc/ssh/sshrc
362exists, runs
363it; otherwise runs
364.Xr xauth 1 .
365The
366.Dq rc
367files are given the X11
368authentication protocol and cookie in standard input.
369See
370.Sx SSHRC ,
371below.
372.It
373Runs user's shell or command.
374All commands are run under the user's login shell as specified in the
375system password database.
376.El
377.Sh SSHRC
378If the file
379.Pa ~/.ssh/rc
380exists,
381.Xr sh 1
382runs it after reading the
383environment files but before starting the user's shell or command.
384It must not produce any output on stdout; stderr must be used
385instead.
386If X11 forwarding is in use, it will receive the "proto cookie" pair in
387its standard input (and
388.Ev DISPLAY
389in its environment).
390The script must call
391.Xr xauth 1
392because
393.Nm
394will not run xauth automatically to add X11 cookies.
395.Pp
396The primary purpose of this file is to run any initialization routines
397which may be needed before the user's home directory becomes
398accessible; AFS is a particular example of such an environment.
399.Pp
400This file will probably contain some initialization code followed by
401something similar to:
402.Bd -literal -offset 3n
403if read proto cookie && [ -n "$DISPLAY" ]; then
404	if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
405		# X11UseLocalhost=yes
406		echo add unix:`echo $DISPLAY |
407		    cut -c11-` $proto $cookie
408	else
409		# X11UseLocalhost=no
410		echo add $DISPLAY $proto $cookie
411	fi | xauth -q -
412fi
413.Ed
414.Pp
415If this file does not exist,
416.Pa /etc/ssh/sshrc
417is run, and if that
418does not exist either, xauth is used to add the cookie.
419.Sh AUTHORIZED_KEYS FILE FORMAT
420.Cm AuthorizedKeysFile
421specifies the files containing public keys for
422public key authentication;
423if this option is not specified, the default is
424.Pa ~/.ssh/authorized_keys
425and
426.Pa ~/.ssh/authorized_keys2 .
427Each line of the file contains one
428key (empty lines and lines starting with a
429.Ql #
430are ignored as
431comments).
432Public keys consist of the following space-separated fields:
433options, keytype, base64-encoded key, comment.
434The options field is optional.
435The keytype is
436.Dq ecdsa-sha2-nistp256 ,
437.Dq ecdsa-sha2-nistp384 ,
438.Dq ecdsa-sha2-nistp521 ,
439.Dq ssh-ed25519 ,
440.Dq ssh-dss
441or
442.Dq ssh-rsa ;
443the comment field is not used for anything (but may be convenient for the
444user to identify the key).
445.Pp
446Note that lines in this file can be several hundred bytes long
447(because of the size of the public key encoding) up to a limit of
4488 kilobytes, which permits DSA keys up to 8 kilobits and RSA
449keys up to 16 kilobits.
450You don't want to type them in; instead, copy the
451.Pa id_dsa.pub ,
452.Pa id_ecdsa.pub ,
453.Pa id_ed25519.pub ,
454or the
455.Pa id_rsa.pub
456file and edit it.
457.Pp
458.Nm
459enforces a minimum RSA key modulus size of 1024 bits.
460.Pp
461The options (if present) consist of comma-separated option
462specifications.
463No spaces are permitted, except within double quotes.
464The following option specifications are supported (note
465that option keywords are case-insensitive):
466.Bl -tag -width Ds
467.It Cm agent-forwarding
468Enable authentication agent forwarding previously disabled by the
469.Cm restrict
470option.
471.It Cm cert-authority
472Specifies that the listed key is a certification authority (CA) that is
473trusted to validate signed certificates for user authentication.
474.Pp
475Certificates may encode access restrictions similar to these key options.
476If both certificate restrictions and key options are present, the most
477restrictive union of the two is applied.
478.It Cm command="command"
479Specifies that the command is executed whenever this key is used for
480authentication.
481The command supplied by the user (if any) is ignored.
482The command is run on a pty if the client requests a pty;
483otherwise it is run without a tty.
484If an 8-bit clean channel is required,
485one must not request a pty or should specify
486.Cm no-pty .
487A quote may be included in the command by quoting it with a backslash.
488.Pp
489This option might be useful
490to restrict certain public keys to perform just a specific operation.
491An example might be a key that permits remote backups but nothing else.
492Note that the client may specify TCP and/or X11
493forwarding unless they are explicitly prohibited, e.g. using the
494.Cm restrict
495key option.
496.Pp
497The command originally supplied by the client is available in the
498.Ev SSH_ORIGINAL_COMMAND
499environment variable.
500Note that this option applies to shell, command or subsystem execution.
501Also note that this command may be superseded by a
502.Xr sshd_config 5
503.Cm ForceCommand
504directive.
505.Pp
506If a command is specified and a forced-command is embedded in a certificate
507used for authentication, then the certificate will be accepted only if the
508two commands are identical.
509.It Cm environment="NAME=value"
510Specifies that the string is to be added to the environment when
511logging in using this key.
512Environment variables set this way
513override other default environment values.
514Multiple options of this type are permitted.
515Environment processing is disabled by default and is
516controlled via the
517.Cm PermitUserEnvironment
518option.
519.It Cm expiry-time="timespec"
520Specifies a time after which the key will not be accepted.
521The time may be specified as a YYYYMMDD date or a YYYYMMDDHHMM[SS] time
522in the system time-zone.
523.It Cm from="pattern-list"
524Specifies that in addition to public key authentication, either the canonical
525name of the remote host or its IP address must be present in the
526comma-separated list of patterns.
527See PATTERNS in
528.Xr ssh_config 5
529for more information on patterns.
530.Pp
531In addition to the wildcard matching that may be applied to hostnames or
532addresses, a
533.Cm from
534stanza may match IP addresses using CIDR address/masklen notation.
535.Pp
536The purpose of this option is to optionally increase security: public key
537authentication by itself does not trust the network or name servers or
538anything (but the key); however, if somebody somehow steals the key, the key
539permits an intruder to log in from anywhere in the world.
540This additional option makes using a stolen key more difficult (name
541servers and/or routers would have to be compromised in addition to
542just the key).
543.It Cm no-agent-forwarding
544Forbids authentication agent forwarding when this key is used for
545authentication.
546.It Cm no-port-forwarding
547Forbids TCP forwarding when this key is used for authentication.
548Any port forward requests by the client will return an error.
549This might be used, e.g. in connection with the
550.Cm command
551option.
552.It Cm no-pty
553Prevents tty allocation (a request to allocate a pty will fail).
554.It Cm no-user-rc
555Disables execution of
556.Pa ~/.ssh/rc .
557.It Cm no-X11-forwarding
558Forbids X11 forwarding when this key is used for authentication.
559Any X11 forward requests by the client will return an error.
560.It Cm permitlisten="[host:]port"
561Limit remote port forwarding with the
562.Xr ssh 1
563.Fl R
564option such that it may only listen on the specified host (optional) and port.
565IPv6 addresses can be specified by enclosing the address in square brackets.
566Multiple
567.Cm permitlisten
568options may be applied separated by commas.
569Hostnames may include wildcards as described in the PATTERNS section in
570.Xr ssh_config 5 .
571A port specification of
572.Cm *
573matches any port.
574Note that the setting of
575.Cm GatewayPorts
576may further restrict listen addresses.
577Note that
578.Xr ssh 1
579will send a hostname of
580.Dq localhost
581if a listen host was not specified when the forwarding was requested, and
582that this name is treated differently to the explicit localhost addresses
583.Dq 127.0.0.1
584and
585.Dq ::1 .
586.It Cm permitopen="host:port"
587Limit local port forwarding with the
588.Xr ssh 1
589.Fl L
590option such that it may only connect to the specified host and port.
591IPv6 addresses can be specified by enclosing the address in square brackets.
592Multiple
593.Cm permitopen
594options may be applied separated by commas.
595No pattern matching is performed on the specified hostnames,
596they must be literal domains or addresses.
597A port specification of
598.Cm *
599matches any port.
600.It Cm port-forwarding
601Enable port forwarding previously disabled by the
602.Cm restrict
603option.
604.It Cm principals="principals"
605On a
606.Cm cert-authority
607line, specifies allowed principals for certificate authentication as a
608comma-separated list.
609At least one name from the list must appear in the certificate's
610list of principals for the certificate to be accepted.
611This option is ignored for keys that are not marked as trusted certificate
612signers using the
613.Cm cert-authority
614option.
615.It Cm pty
616Permits tty allocation previously disabled by the
617.Cm restrict
618option.
619.It Cm restrict
620Enable all restrictions, i.e. disable port, agent and X11 forwarding,
621as well as disabling PTY allocation
622and execution of
623.Pa ~/.ssh/rc .
624If any future restriction capabilities are added to authorized_keys files
625they will be included in this set.
626.It Cm tunnel="n"
627Force a
628.Xr tun 4
629device on the server.
630Without this option, the next available device will be used if
631the client requests a tunnel.
632.It Cm user-rc
633Enables execution of
634.Pa ~/.ssh/rc
635previously disabled by the
636.Cm restrict
637option.
638.It Cm X11-forwarding
639Permits X11 forwarding previously disabled by the
640.Cm restrict
641option.
642.El
643.Pp
644An example authorized_keys file:
645.Bd -literal -offset 3n
646# Comments allowed at start of line
647ssh-rsa AAAAB3Nza...LiPk== user@example.net
648from="*.sales.example.net,!pc.sales.example.net" ssh-rsa
649AAAAB2...19Q== john@example.net
650command="dump /home",no-pty,no-port-forwarding ssh-rsa
651AAAAC3...51R== example.net
652permitopen="192.0.2.1:80",permitopen="192.0.2.2:25" ssh-rsa
653AAAAB5...21S==
654permitlisten="localhost:8080",permitopen="localhost:22000" ssh-rsa
655AAAAB5...21S==
656tunnel="0",command="sh /etc/netstart tun0" ssh-rsa AAAA...==
657jane@example.net
658restrict,command="uptime" ssh-rsa AAAA1C8...32Tv==
659user@example.net
660restrict,pty,command="nethack" ssh-rsa AAAA1f8...IrrC5==
661user@example.net
662.Ed
663.Sh SSH_KNOWN_HOSTS FILE FORMAT
664The
665.Pa /etc/ssh/ssh_known_hosts
666and
667.Pa ~/.ssh/known_hosts
668files contain host public keys for all known hosts.
669The global file should
670be prepared by the administrator (optional), and the per-user file is
671maintained automatically: whenever the user connects to an unknown host,
672its key is added to the per-user file.
673.Pp
674Each line in these files contains the following fields: markers (optional),
675hostnames, keytype, base64-encoded key, comment.
676The fields are separated by spaces.
677.Pp
678The marker is optional, but if it is present then it must be one of
679.Dq @cert-authority ,
680to indicate that the line contains a certification authority (CA) key,
681or
682.Dq @revoked ,
683to indicate that the key contained on the line is revoked and must not ever
684be accepted.
685Only one marker should be used on a key line.
686.Pp
687Hostnames is a comma-separated list of patterns
688.Pf ( Ql *
689and
690.Ql \&?
691act as
692wildcards); each pattern in turn is matched against the host name.
693When
694.Nm sshd
695is authenticating a client, such as when using
696.Cm HostbasedAuthentication ,
697this will be the canonical client host name.
698When
699.Xr ssh 1
700is authenticating a server, this will be the host name
701given by the user, the value of the
702.Xr ssh 1
703.Cm HostkeyAlias
704if it was specified, or the canonical server hostname if the
705.Xr ssh 1
706.Cm CanonicalizeHostname
707option was used.
708.Pp
709A pattern may also be preceded by
710.Ql \&!
711to indicate negation: if the host name matches a negated
712pattern, it is not accepted (by that line) even if it matched another
713pattern on the line.
714A hostname or address may optionally be enclosed within
715.Ql \&[
716and
717.Ql \&]
718brackets then followed by
719.Ql \&:
720and a non-standard port number.
721.Pp
722Alternately, hostnames may be stored in a hashed form which hides host names
723and addresses should the file's contents be disclosed.
724Hashed hostnames start with a
725.Ql |
726character.
727Only one hashed hostname may appear on a single line and none of the above
728negation or wildcard operators may be applied.
729.Pp
730The keytype and base64-encoded key are taken directly from the host key; they
731can be obtained, for example, from
732.Pa /etc/ssh/ssh_host_rsa_key.pub .
733The optional comment field continues to the end of the line, and is not used.
734.Pp
735Lines starting with
736.Ql #
737and empty lines are ignored as comments.
738.Pp
739When performing host authentication, authentication is accepted if any
740matching line has the proper key; either one that matches exactly or,
741if the server has presented a certificate for authentication, the key
742of the certification authority that signed the certificate.
743For a key to be trusted as a certification authority, it must use the
744.Dq @cert-authority
745marker described above.
746.Pp
747The known hosts file also provides a facility to mark keys as revoked,
748for example when it is known that the associated private key has been
749stolen.
750Revoked keys are specified by including the
751.Dq @revoked
752marker at the beginning of the key line, and are never accepted for
753authentication or as certification authorities, but instead will
754produce a warning from
755.Xr ssh 1
756when they are encountered.
757.Pp
758It is permissible (but not
759recommended) to have several lines or different host keys for the same
760names.
761This will inevitably happen when short forms of host names
762from different domains are put in the file.
763It is possible
764that the files contain conflicting information; authentication is
765accepted if valid information can be found from either file.
766.Pp
767Note that the lines in these files are typically hundreds of characters
768long, and you definitely don't want to type in the host keys by hand.
769Rather, generate them by a script,
770.Xr ssh-keyscan 1
771or by taking, for example,
772.Pa /etc/ssh/ssh_host_rsa_key.pub
773and adding the host names at the front.
774.Xr ssh-keygen 1
775also offers some basic automated editing for
776.Pa ~/.ssh/known_hosts
777including removing hosts matching a host name and converting all host
778names to their hashed representations.
779.Pp
780An example ssh_known_hosts file:
781.Bd -literal -offset 3n
782# Comments allowed at start of line
783closenet,...,192.0.2.53 1024 37 159...93 closenet.example.net
784cvs.example.net,192.0.2.10 ssh-rsa AAAA1234.....=
785# A hashed hostname
786|1|JfKTdBh7rNbXkVAQCRp4OQoPfmI=|USECr3SWf1JUPsms5AqfD5QfxkM= ssh-rsa
787AAAA1234.....=
788# A revoked key
789@revoked * ssh-rsa AAAAB5W...
790# A CA key, accepted for any host in *.mydomain.com or *.mydomain.org
791@cert-authority *.mydomain.org,*.mydomain.com ssh-rsa AAAAB5W...
792.Ed
793.Sh FILES
794.Bl -tag -width Ds -compact
795.It Pa ~/.hushlogin
796This file is used to suppress printing the last login time and
797.Pa /etc/motd ,
798if
799.Cm PrintLastLog
800and
801.Cm PrintMotd ,
802respectively,
803are enabled.
804It does not suppress printing of the banner specified by
805.Cm Banner .
806.Pp
807.It Pa ~/.rhosts
808This file is used for host-based authentication (see
809.Xr ssh 1
810for more information).
811On some machines this file may need to be
812world-readable if the user's home directory is on an NFS partition,
813because
814.Nm
815reads it as root.
816Additionally, this file must be owned by the user,
817and must not have write permissions for anyone else.
818The recommended
819permission for most machines is read/write for the user, and not
820accessible by others.
821.Pp
822.It Pa ~/.shosts
823This file is used in exactly the same way as
824.Pa .rhosts ,
825but allows host-based authentication without permitting login with
826rlogin/rsh.
827.Pp
828.It Pa ~/.ssh/
829This directory is the default location for all user-specific configuration
830and authentication information.
831There is no general requirement to keep the entire contents of this directory
832secret, but the recommended permissions are read/write/execute for the user,
833and not accessible by others.
834.Pp
835.It Pa ~/.ssh/authorized_keys
836Lists the public keys (DSA, ECDSA, Ed25519, RSA)
837that can be used for logging in as this user.
838The format of this file is described above.
839The content of the file is not highly sensitive, but the recommended
840permissions are read/write for the user, and not accessible by others.
841.Pp
842If this file, the
843.Pa ~/.ssh
844directory, or the user's home directory are writable
845by other users, then the file could be modified or replaced by unauthorized
846users.
847In this case,
848.Nm
849will not allow it to be used unless the
850.Cm StrictModes
851option has been set to
852.Dq no .
853.Pp
854.It Pa ~/.ssh/environment
855This file is read into the environment at login (if it exists).
856It can only contain empty lines, comment lines (that start with
857.Ql # ) ,
858and assignment lines of the form name=value.
859The file should be writable
860only by the user; it need not be readable by anyone else.
861Environment processing is disabled by default and is
862controlled via the
863.Cm PermitUserEnvironment
864option.
865.Pp
866.It Pa ~/.ssh/known_hosts
867Contains a list of host keys for all hosts the user has logged into
868that are not already in the systemwide list of known host keys.
869The format of this file is described above.
870This file should be writable only by root/the owner and
871can, but need not be, world-readable.
872.Pp
873.It Pa ~/.ssh/rc
874Contains initialization routines to be run before
875the user's home directory becomes accessible.
876This file should be writable only by the user, and need not be
877readable by anyone else.
878.Pp
879.It Pa /etc/hosts.allow
880.It Pa /etc/hosts.deny
881Access controls that should be enforced by tcp-wrappers are defined here.
882Further details are described in
883.Xr hosts_access 5 .
884.Pp
885.It Pa /etc/hosts.equiv
886This file is for host-based authentication (see
887.Xr ssh 1 ) .
888It should only be writable by root.
889.Pp
890.It Pa /etc/moduli
891Contains Diffie-Hellman groups used for the "Diffie-Hellman Group Exchange"
892key exchange method.
893The file format is described in
894.Xr moduli 5 .
895If no usable groups are found in this file then fixed internal groups will
896be used.
897.Pp
898.It Pa /etc/motd
899See
900.Xr motd 5 .
901.Pp
902.It Pa /etc/nologin
903If this file exists,
904.Nm
905refuses to let anyone except root log in.
906The contents of the file
907are displayed to anyone trying to log in, and non-root connections are
908refused.
909The file should be world-readable.
910.Pp
911.It Pa /etc/shosts.equiv
912This file is used in exactly the same way as
913.Pa hosts.equiv ,
914but allows host-based authentication without permitting login with
915rlogin/rsh.
916.Pp
917.It Pa /etc/ssh/ssh_host_ecdsa_key
918.It Pa /etc/ssh/ssh_host_ed25519_key
919.It Pa /etc/ssh/ssh_host_rsa_key
920These files contain the private parts of the host keys.
921These files should only be owned by root, readable only by root, and not
922accessible to others.
923Note that
924.Nm
925does not start if these files are group/world-accessible.
926.Pp
927.It Pa /etc/ssh/ssh_host_ecdsa_key.pub
928.It Pa /etc/ssh/ssh_host_ed25519_key.pub
929.It Pa /etc/ssh/ssh_host_rsa_key.pub
930These files contain the public parts of the host keys.
931These files should be world-readable but writable only by
932root.
933Their contents should match the respective private parts.
934These files are not
935really used for anything; they are provided for the convenience of
936the user so their contents can be copied to known hosts files.
937These files are created using
938.Xr ssh-keygen 1 .
939.Pp
940.It Pa /etc/ssh/ssh_known_hosts
941Systemwide list of known host keys.
942This file should be prepared by the
943system administrator to contain the public host keys of all machines in the
944organization.
945The format of this file is described above.
946This file should be writable only by root/the owner and
947should be world-readable.
948.Pp
949.It Pa /etc/ssh/sshd_config
950Contains configuration data for
951.Nm sshd .
952The file format and configuration options are described in
953.Xr sshd_config 5 .
954.Pp
955.It Pa /etc/ssh/sshrc
956Similar to
957.Pa ~/.ssh/rc ,
958it can be used to specify
959machine-specific login-time initializations globally.
960This file should be writable only by root, and should be world-readable.
961.Pp
962.It Pa /var/empty
963.Xr chroot 2
964directory used by
965.Nm
966during privilege separation in the pre-authentication phase.
967The directory should not contain any files and must be owned by root
968and not group or world-writable.
969.Pp
970.It Pa /var/run/sshd.pid
971Contains the process ID of the
972.Nm
973listening for connections (if there are several daemons running
974concurrently for different ports, this contains the process ID of the one
975started last).
976The content of this file is not sensitive; it can be world-readable.
977.El
978.Sh SEE ALSO
979.Xr scp 1 ,
980.Xr sftp 1 ,
981.Xr ssh 1 ,
982.Xr ssh-add 1 ,
983.Xr ssh-agent 1 ,
984.Xr ssh-keygen 1 ,
985.Xr ssh-keyscan 1 ,
986.Xr chroot 2 ,
987.Xr hosts_access 5 ,
988.Xr login.conf 5 ,
989.Xr moduli 5 ,
990.Xr sshd_config 5 ,
991.Xr inetd 8 ,
992.Xr sftp-server 8
993.Sh AUTHORS
994OpenSSH is a derivative of the original and free
995ssh 1.2.12 release by Tatu Ylonen.
996Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos,
997Theo de Raadt and Dug Song
998removed many bugs, re-added newer features and
999created OpenSSH.
1000Markus Friedl contributed the support for SSH
1001protocol versions 1.5 and 2.0.
1002Niels Provos and Markus Friedl contributed support
1003for privilege separation.
1004