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