File Coverage

blib/lib/Config/Model/models/Sshd/MatchElement.pl
Criterion Covered Total %
statement 6 6 100.0
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 8 8 100.0


line stmt bran cond sub pod time code
1             #
2             # This file is part of Config-Model-OpenSsh
3             #
4             # This software is Copyright (c) 2008-2022 by Dominique Dumont.
5             #
6             # This is free software, licensed under:
7             #
8             # The GNU Lesser General Public License, Version 2.1, February 1999
9             #
10 3     3   24308 use strict;
  3         9  
  3         103  
11 3     3   18 use warnings;
  3         15  
  3         3719  
12              
13             return [
14             {
15             'accept' => [
16             '.*',
17             {
18             'summary' => 'boilerplate parameter that may hide a typo',
19             'type' => 'leaf',
20             'value_type' => 'uniline',
21             'warn' => 'Unknown parameter. Please make sure there\'s no typo and contact the author'
22             }
23             ],
24             'class_description' => 'This configuration class was generated from sshd_system documentation.
25             by L<parse-man.pl|https://github.com/dod38fr/config-model-openssh/contrib/parse-man.pl>
26             ',
27             'element' => [
28             'AcceptEnv',
29             {
30             'cargo' => {
31             'type' => 'leaf',
32             'value_type' => 'uniline'
33             },
34             'description' => 'Specifies what environment variables sent by the client will be copied into the
35             session\'s L<environ(7)>. See B<SendEnv> and B<SetEnv> in ssh_config5 for how to
36             configure the client. The B<TERM> environment variable is always accepted
37             whenever the client requests a pseudo-terminal as it is required by the
38             protocol. Variables are specified by name, which may contain the wildcard
39             characters \'*\' and \'?\' Multiple environment variables may be separated by
40             whitespace or spread across multiple B<AcceptEnv> directives. Be warned that
41             some environment variables could be used to bypass restricted user
42             environments. For this reason, care should be taken in the use of this
43             directive. The default is not to accept any environment variables.',
44             'type' => 'list'
45             },
46             'AllowAgentForwarding',
47             {
48             'description' => 'Specifies whether ssh-agent1 forwarding is permitted. The default is B<yes>
49             Note that disabling agent forwarding does not improve security unless users are
50             also denied shell access, as they can always install their own forwarders.',
51             'type' => 'leaf',
52             'upstream_default' => 'yes',
53             'value_type' => 'boolean',
54             'write_as' => [
55             'no',
56             'yes'
57             ]
58             },
59             'AllowGroups',
60             {
61             'cargo' => {
62             'type' => 'leaf',
63             'value_type' => 'uniline'
64             },
65             'description' => 'This keyword can be followed by a list of group name patterns, separated by
66             spaces. If specified, login is allowed only for users whose primary group or
67             supplementary group list matches one of the patterns. Only group names are
68             valid; a numerical group ID is not recognized. By default, login is allowed for
69             all groups. The allow/deny groups directives are processed in the following
70             order: B<DenyGroups> B<AllowGroups>
71              
72             See PATTERNS in ssh_config5 for more information on patterns. This keyword may
73             appear multiple times in B<sshd_config> with each instance appending to the
74             list.',
75             'type' => 'list'
76             },
77             'AllowStreamLocalForwarding',
78             {
79             'choice' => [
80             'all',
81             'local',
82             'no',
83             'remote',
84             'yes'
85             ],
86             'description' => 'Specifies whether StreamLocal (Unix-domain socket) forwarding is permitted. The
87             available options are B<yes> (the default) or B<all> to allow StreamLocal
88             forwarding, B<no> to prevent all StreamLocal forwarding, B<local> to allow
89             local (from the perspective of L<ssh(1)>) forwarding only or B<remote> to allow
90             remote forwarding only. Note that disabling StreamLocal forwarding does not
91             improve security unless users are also denied shell access, as they can always
92             install their own forwarders.',
93             'type' => 'leaf',
94             'upstream_default' => 'yes',
95             'value_type' => 'enum'
96             },
97             'AllowTcpForwarding',
98             {
99             'choice' => [
100             'all',
101             'local',
102             'no',
103             'remote',
104             'yes'
105             ],
106             'description' => 'Specifies whether TCP forwarding is permitted. The available options are B<yes>
107             (the default) or B<all> to allow TCP forwarding, B<no> to prevent all TCP
108             forwarding, B<local> to allow local (from the perspective of L<ssh(1)>)
109             forwarding only or B<remote> to allow remote forwarding only. Note that
110             disabling TCP forwarding does not improve security unless users are also denied
111             shell access, as they can always install their own forwarders.',
112             'type' => 'leaf',
113             'upstream_default' => 'yes',
114             'value_type' => 'enum'
115             },
116             'AllowUsers',
117             {
118             'cargo' => {
119             'type' => 'leaf',
120             'value_type' => 'uniline'
121             },
122             'description' => 'This keyword can be followed by a list of user name patterns, separated by
123             spaces. If specified, login is allowed only for user names that match one of
124             the patterns. Only user names are valid; a numerical user ID is not recognized.
125             By default, login is allowed for all users. If the pattern takes the form
126             USER@HOST then USER and HOST are separately checked, restricting logins to
127             particular users from particular hosts. HOST criteria may additionally contain
128             addresses to match in CIDR address/masklen format. The allow/deny users
129             directives are processed in the following order: B<DenyUsers> B<AllowUsers>
130              
131             See PATTERNS in ssh_config5 for more information on patterns. This keyword may
132             appear multiple times in B<sshd_config> with each instance appending to the
133             list.',
134             'type' => 'list'
135             },
136             'AuthenticationMethods',
137             {
138             'description' => 'Specifies the authentication methods that must be successfully completed for a
139             user to be granted access. This option must be followed by one or more lists of
140             comma-separated authentication method names, or by the single string B<any> to
141             indicate the default behaviour of accepting any single authentication method.
142             If the default is overridden, then successful authentication requires
143             completion of every method in at least one of these lists.
144              
145             For example, Qq publickey, password publickey, keyboard-interactive would
146             require the user to complete public key authentication, followed by either
147             password or keyboard interactive authentication. Only methods that are next in
148             one or more lists are offered at each stage, so for this example it would not
149             be possible to attempt password or keyboard-interactive authentication before
150             public key.
151              
152             For keyboard interactive authentication it is also possible to restrict
153             authentication to a specific device by appending a colon followed by the device
154             identifier B<bsdauth> or B<pam> depending on the server configuration. For
155             example, Qq keyboard-interactive:bsdauth would restrict keyboard interactive
156             authentication to the B<bsdauth> device.
157              
158             If the publickey method is listed more than once, L<sshd(8)> verifies that keys
159             that have been used successfully are not reused for subsequent authentications.
160             For example, Qq publickey, publickey requires successful authentication using
161             two different public keys.
162              
163             Note that each authentication method listed should also be explicitly enabled
164             in the configuration.
165              
166             The available authentication methods are: Qq gssapi-with-mic , Qq hostbased ,
167             Qq keyboard-interactive , Qq none (used for access to password-less accounts
168             when B<PermitEmptyPasswords> is enabled), Qq password and Qq publickey .',
169             'type' => 'leaf',
170             'value_type' => 'uniline'
171             },
172             'AuthorizedKeysCommand',
173             {
174             'description' => 'Specifies a program to be used to look up the user\'s public keys. The program
175             must be owned by root, not writable by group or others and specified by an
176             absolute path. Arguments to B<AuthorizedKeysCommand> accept the tokens
177             described in the I<TOKENS> section. If no arguments are specified then the
178             username of the target user is used.
179              
180             The program should produce on standard output zero or more lines of
181             authorized_keys output (see I<AUTHORIZED_KEYS> in L<sshd(8)>).
182             B<AuthorizedKeysCommand> is tried after the usual B<AuthorizedKeysFile> files
183             and will not be executed if a matching key is found there. By default, no
184             B<AuthorizedKeysCommand> is run.',
185             'type' => 'leaf',
186             'value_type' => 'uniline'
187             },
188             'AuthorizedKeysCommandUser',
189             {
190             'description' => 'Specifies the user under whose account the B<AuthorizedKeysCommand> is run. It
191             is recommended to use a dedicated user that has no other role on the host than
192             running authorized keys commands. If B<AuthorizedKeysCommand> is specified but
193             B<AuthorizedKeysCommandUser> is not, then L<sshd(8)> will refuse to start.',
194             'type' => 'leaf',
195             'value_type' => 'uniline'
196             },
197             'AuthorizedKeysFile',
198             {
199             'cargo' => {
200             'type' => 'leaf',
201             'value_type' => 'uniline'
202             },
203             'description' => 'Specifies the file that contains the public keys used for user authentication.
204             The format is described in the AUTHORIZED_KEYS FILE FORMAT section of
205             L<sshd(8)>. Arguments to B<AuthorizedKeysFile> accept the tokens described in
206             the I<TOKENS> section. After expansion, B<AuthorizedKeysFile> is taken to be an
207             absolute path or one relative to the user\'s home directory. Multiple files may
208             be listed, separated by whitespace. Alternately this option may be set to
209             B<none> to skip checking for user keys in files. The default is Qq
210             .ssh/authorized_keys .ssh/authorized_keys2 .',
211             'migrate_values_from' => '- AuthorizedKeysFile2',
212             'type' => 'list'
213             },
214             'AuthorizedPrincipalsCommand',
215             {
216             'description' => 'Specifies a program to be used to generate the list of allowed certificate
217             principals as per B<AuthorizedPrincipalsFile> The program must be owned by
218             root, not writable by group or others and specified by an absolute path.
219             Arguments to B<AuthorizedPrincipalsCommand> accept the tokens described in the
220             I<TOKENS> section. If no arguments are specified then the username of the
221             target user is used.
222              
223             The program should produce on standard output zero or more lines of
224             B<AuthorizedPrincipalsFile> output. If either B<AuthorizedPrincipalsCommand> or
225             B<AuthorizedPrincipalsFile> is specified, then certificates offered by the
226             client for authentication must contain a principal that is listed. By default,
227             no B<AuthorizedPrincipalsCommand> is run.',
228             'type' => 'leaf',
229             'value_type' => 'uniline'
230             },
231             'AuthorizedPrincipalsCommandUser',
232             {
233             'description' => 'Specifies the user under whose account the B<AuthorizedPrincipalsCommand> is
234             run. It is recommended to use a dedicated user that has no other role on the
235             host than running authorized principals commands. If
236             B<AuthorizedPrincipalsCommand> is specified but
237             B<AuthorizedPrincipalsCommandUser> is not, then L<sshd(8)> will refuse to
238             start.',
239             'type' => 'leaf',
240             'value_type' => 'uniline'
241             },
242             'AuthorizedPrincipalsFile',
243             {
244             'description' => 'Specifies a file that lists principal names that are accepted for certificate
245             authentication. When using certificates signed by a key listed in
246             B<TrustedUserCAKeys> this file lists names, one of which must appear in the
247             certificate for it to be accepted for authentication. Names are listed one per
248             line preceded by key options (as described in I<AUTHORIZED_KEYS FILE FORMAT> in
249             L<sshd(8)>). Empty lines and comments starting with \'#\' are ignored.
250              
251             Arguments to B<AuthorizedPrincipalsFile> accept the tokens described in the
252             I<TOKENS> section. After expansion, B<AuthorizedPrincipalsFile> is taken to be
253             an absolute path or one relative to the user\'s home directory. The default is
254             B<none> i.e. not to use a principals file - in this case, the username of the
255             user must appear in a certificate\'s principals list for it to be accepted.
256              
257             Note that B<AuthorizedPrincipalsFile> is only used when authentication proceeds
258             using a CA listed in B<TrustedUserCAKeys> and is not consulted for
259             certification authorities trusted via ~/.ssh/authorized_keys though the
260             B<principals=> key option offers a similar facility (see L<sshd(8)> for
261             details).',
262             'type' => 'leaf',
263             'upstream_default' => 'none',
264             'value_type' => 'uniline'
265             },
266             'Banner',
267             {
268             'description' => 'The contents of the specified file are sent to the remote user before
269             authentication is allowed. If the argument is B<none> then no banner is
270             displayed. By default, no banner is displayed.',
271             'type' => 'leaf',
272             'value_type' => 'uniline'
273             },
274             'CASignatureAlgorithms',
275             {
276             'description' => 'Specifies which algorithms are allowed for signing of certificates by
277             certificate authorities (CAs). The default is: ssh-ed25519,
278             ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521,
279             sk-ssh-ed25519@openssh.com, sk-ecdsa-sha2-nistp256@openssh.com, rsa-sha2-512,
280             rsa-sha2-256
281              
282             If the specified list begins with a \'+\' character, then the specified
283             algorithms will be appended to the default set instead of replacing them. If
284             the specified list begins with a \'-\' character, then the specified algorithms
285             (including wildcards) will be removed from the default set instead of replacing
286             them.
287              
288             Certificates signed using other algorithms will not be accepted for public key
289             or host-based authentication.',
290             'type' => 'leaf',
291             'value_type' => 'uniline'
292             },
293             'ChannelTimeout',
294             {
295             'description' => 'Specifies whether and how quickly L<sshd(8)> should close inactive channels.
296             Timeouts are specified as one or more \'\'type=interval\'\' pairs separated by
297             whitespace, where the \'\'type\'\' must be a channel type name (as described in the
298             table below), optionally containing wildcard characters.
299              
300             The timeout value \'\'interval\'\' is specified in seconds or may use any of the
301             units documented in the I<TIME FORMATS> section. For example, \'\'session:*=5m\'\'
302             would cause all sessions to terminate after five minutes of inactivity.
303             Specifying a zero value disables the inactivity timeout.
304              
305             The available channel types include:
306              
307             B<agent-connection> Open connections to ssh-agent1. B<direct-tcpip ,
308             direct-streamlocal@openssh.com> Open TCP or Unix socket (respectively)
309             connections that have been established from a L<ssh(1)> local forwarding, i.e.
310             B<LocalForward> or B<DynamicForward> B<forwarded-tcpip ,
311             forwarded-streamlocal@openssh.com> Open TCP or Unix socket (respectively)
312             connections that have been established to a L<sshd(8)> listening on behalf of a
313             L<ssh(1)> remote forwarding, i.e. B<RemoteForward> B<session:command> Command
314             execution sessions. B<session:shell> Interactive shell sessions.
315             B<session:subsystem:...> Subsystem sessions, e.g. for L<sftp(1)>, which could
316             be identified as B<session:subsystem:sftp> B<x11-connection> Open X11
317             forwarding sessions.
318              
319             Note that in all the above cases, terminating an inactive session does not
320             guarantee to remove all resources associated with the session, e.g. shell
321             processes or X11 clients relating to the session may continue to execute.
322              
323             Moreover, terminating an inactive channel or session does not necessarily close
324             the SSH connection, nor does it prevent a client from requesting another
325             channel of the same type. In particular, expiring an inactive forwarding
326             session does not prevent another identical forwarding from being subsequently
327             created. See also B<UnusedConnectionTimeout> which may be used in conjunction
328             with this option.
329              
330             The default is not to expire channels of any type for inactivity.',
331             'type' => 'leaf',
332             'value_type' => 'uniline'
333             },
334             'ChrootDirectory',
335             {
336             'description' => 'Specifies the pathname of a directory to L<chroot(2)> to after authentication.
337             At session startup L<sshd(8)> checks that all components of the pathname are
338             root-owned directories which are not writable by any other user or group. After
339             the chroot, L<sshd(8)> changes the working directory to the user\'s home
340             directory. Arguments to B<ChrootDirectory> accept the tokens described in the
341             I<TOKENS> section.
342              
343             The B<ChrootDirectory> must contain the necessary files and directories to
344             support the user\'s session. For an interactive session this requires at least a
345             shell, typically L<sh(1)>, and basic /dev nodes such as L<null(4)>, L<zero(4)>,
346             L<stdin(4)>, L<stdout(4)>, L<stderr(4)>, and L<tty(4)> devices. For file
347             transfer sessions using SFTP no additional configuration of the environment is
348             necessary if the in-process sftp-server is used, though sessions which use
349             logging may require /dev/log inside the chroot directory on some operating
350             systems (see sftp-server8 for details).
351              
352             For safety, it is very important that the directory hierarchy be prevented from
353             modification by other processes on the system (especially those outside the
354             jail). Misconfiguration can lead to unsafe environments which L<sshd(8)> cannot
355             detect.
356              
357             The default is B<none> indicating not to L<chroot(2)>.',
358             'type' => 'leaf',
359             'upstream_default' => 'none',
360             'value_type' => 'uniline'
361             },
362             'ClientAliveCountMax',
363             {
364             'description' => 'Sets the number of client alive messages which may be sent without L<sshd(8)>
365             receiving any messages back from the client. If this threshold is reached while
366             client alive messages are being sent, sshd will disconnect the client,
367             terminating the session. It is important to note that the use of client alive
368             messages is very different from B<TCPKeepAlive> The client alive messages are
369             sent through the encrypted channel and therefore will not be spoofable. The TCP
370             keepalive option enabled by B<TCPKeepAlive> is spoofable. The client alive
371             mechanism is valuable when the client or server depend on knowing when a
372             connection has become unresponsive.
373              
374             The default value is 3. If B<ClientAliveInterval> is set to 15, and
375             B<ClientAliveCountMax> is left at the default, unresponsive SSH clients will be
376             disconnected after approximately 45 seconds. Setting a zero
377             B<ClientAliveCountMax> disables connection termination.',
378             'type' => 'leaf',
379             'upstream_default' => '3',
380             'value_type' => 'integer'
381             },
382             'ClientAliveInterval',
383             {
384             'description' => 'Sets a timeout interval in seconds after which if no data has been received
385             from the client, L<sshd(8)> will send a message through the encrypted channel
386             to request a response from the client. The default is 0, indicating that these
387             messages will not be sent to the client.',
388             'type' => 'leaf',
389             'upstream_default' => '0',
390             'value_type' => 'integer'
391             },
392             'DenyGroups',
393             {
394             'cargo' => {
395             'type' => 'leaf',
396             'value_type' => 'uniline'
397             },
398             'description' => 'This keyword can be followed by a list of group name patterns, separated by
399             spaces. Login is disallowed for users whose primary group or supplementary
400             group list matches one of the patterns. Only group names are valid; a numerical
401             group ID is not recognized. By default, login is allowed for all groups. The
402             allow/deny groups directives are processed in the following order:
403             B<DenyGroups> B<AllowGroups>
404              
405             See PATTERNS in ssh_config5 for more information on patterns. This keyword may
406             appear multiple times in B<sshd_config> with each instance appending to the
407             list.',
408             'type' => 'list'
409             },
410             'DenyUsers',
411             {
412             'cargo' => {
413             'type' => 'leaf',
414             'value_type' => 'uniline'
415             },
416             'description' => 'This keyword can be followed by a list of user name patterns, separated by
417             spaces. Login is disallowed for user names that match one of the patterns. Only
418             user names are valid; a numerical user ID is not recognized. By default, login
419             is allowed for all users. If the pattern takes the form USER@HOST then USER and
420             HOST are separately checked, restricting logins to particular users from
421             particular hosts. HOST criteria may additionally contain addresses to match in
422             CIDR address/masklen format. The allow/deny users directives are processed in
423             the following order: B<DenyUsers> B<AllowUsers>
424              
425             See PATTERNS in ssh_config5 for more information on patterns. This keyword may
426             appear multiple times in B<sshd_config> with each instance appending to the
427             list.',
428             'type' => 'list'
429             },
430             'DisableForwarding',
431             {
432             'description' => 'Disables all forwarding features, including X11, ssh-agent1, TCP and
433             StreamLocal. This option overrides all other forwarding-related options and may
434             simplify restricted configurations.',
435             'type' => 'leaf',
436             'value_type' => 'uniline'
437             },
438             'ExposeAuthInfo',
439             {
440             'description' => 'Writes a temporary file containing a list of authentication methods and public
441             credentials (e.g. keys) used to authenticate the user. The location of the file
442             is exposed to the user session through the B<SSH_USER_AUTH> environment
443             variable. The default is B<no>',
444             'type' => 'leaf',
445             'upstream_default' => 'no',
446             'value_type' => 'boolean',
447             'write_as' => [
448             'no',
449             'yes'
450             ]
451             },
452             'ForceCommand',
453             {
454             'description' => 'Forces the execution of the command specified by B<ForceCommand> ignoring any
455             command supplied by the client and ~/.ssh/rc if present. The command is invoked
456             by using the user\'s login shell with the -c option. This applies to shell,
457             command, or subsystem execution. It is most useful inside a B<Match> block. The
458             command originally supplied by the client is available in the
459             B<SSH_ORIGINAL_COMMAND> environment variable. Specifying a command of
460             B<internal-sftp> will force the use of an in-process SFTP server that requires
461             no support files when used with B<ChrootDirectory> The default is B<none>',
462             'type' => 'leaf',
463             'upstream_default' => 'none',
464             'value_type' => 'uniline'
465             },
466             'GatewayPorts',
467             {
468             'choice' => [
469             'clientspecified',
470             'no',
471             'yes'
472             ],
473             'description' => 'Specifies whether remote hosts are allowed to connect to ports forwarded for
474             the client. By default, L<sshd(8)> binds remote port forwardings to the
475             loopback address. This prevents other remote hosts from connecting to forwarded
476             ports. B<GatewayPorts> can be used to specify that sshd should allow remote
477             port forwardings to bind to non-loopback addresses, thus allowing other hosts
478             to connect. The argument may be B<no> to force remote port forwardings to be
479             available to the local host only, B<yes> to force remote port forwardings to
480             bind to the wildcard address, or B<clientspecified> to allow the client to
481             select the address to which the forwarding is bound. The default is B<no>',
482             'type' => 'leaf',
483             'upstream_default' => 'no',
484             'value_type' => 'enum'
485             },
486             'GSSAPIAuthentication',
487             {
488             'description' => 'Specifies whether user authentication based on GSSAPI is allowed. The default
489             is B<no>',
490             'type' => 'leaf',
491             'upstream_default' => 'no',
492             'value_type' => 'boolean',
493             'write_as' => [
494             'no',
495             'yes'
496             ]
497             },
498             'HostbasedAcceptedAlgorithms',
499             {
500             'description' => 'Specifies the signature algorithms that will be accepted for hostbased
501             authentication as a list of comma-separated patterns. Alternately if the
502             specified list begins with a \'+\' character, then the specified signature
503             algorithms will be appended to the default set instead of replacing them. If
504             the specified list begins with a \'-\' character, then the specified signature
505             algorithms (including wildcards) will be removed from the default set instead
506             of replacing them. If the specified list begins with a \'^\' character, then the
507             specified signature algorithms will be placed at the head of the default set.
508             The default for this option is: ssh-ed25519-cert-v01@openssh.com,
509             ecdsa-sha2-nistp256-cert-v01@openssh.com,
510             ecdsa-sha2-nistp384-cert-v01@openssh.com,
511             ecdsa-sha2-nistp521-cert-v01@openssh.com, sk-ssh-ed25519-cert-v01@openssh.com,
512             sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, rsa-sha2-512-cert-v01@openssh.com,
513             rsa-sha2-256-cert-v01@openssh.com, ssh-ed25519, ecdsa-sha2-nistp256,
514             ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, sk-ssh-ed25519@openssh.com,
515             sk-ecdsa-sha2-nistp256@openssh.com, rsa-sha2-512, rsa-sha2-256
516              
517             The list of available signature algorithms may also be obtained using Qq ssh -Q
518             HostbasedAcceptedAlgorithms . This was formerly named
519             HostbasedAcceptedKeyTypes.',
520             'type' => 'leaf',
521             'value_type' => 'uniline'
522             },
523             'HostbasedAuthentication',
524             {
525             'description' => 'Specifies whether rhosts or /etc/hosts.equiv authentication together with
526             successful public key client host authentication is allowed (host-based
527             authentication). The default is B<no>',
528             'type' => 'leaf',
529             'upstream_default' => 'no',
530             'value_type' => 'boolean',
531             'write_as' => [
532             'no',
533             'yes'
534             ]
535             },
536             'HostbasedUsesNameFromPacketOnly',
537             {
538             'description' => 'Specifies whether or not the server will attempt to perform a reverse name
539             lookup when matching the name in the ~/.shosts ~/.rhosts and /etc/hosts.equiv
540             files during B<HostbasedAuthentication> A setting of B<yes> means that
541             L<sshd(8)> uses the name supplied by the client rather than attempting to
542             resolve the name from the TCP connection itself. The default is B<no>',
543             'type' => 'leaf',
544             'upstream_default' => 'no',
545             'value_type' => 'boolean',
546             'write_as' => [
547             'no',
548             'yes'
549             ]
550             },
551             'IgnoreRhosts',
552             {
553             'description' => 'Specifies whether to ignore per-user .rhosts and .shosts files during
554             B<HostbasedAuthentication> The system-wide /etc/hosts.equiv and
555             /etc/ssh/shosts.equiv are still used regardless of this setting.
556              
557             Accepted values are B<yes> (the default) to ignore all per-user files,
558             B<shosts-only> to allow the use of .shosts but to ignore .rhosts or B<no> to
559             allow both .shosts and rhosts',
560             'type' => 'leaf',
561             'upstream_default' => 'yes',
562             'value_type' => 'boolean',
563             'write_as' => [
564             'no',
565             'yes'
566             ]
567             },
568             'Include',
569             {
570             'cargo' => {
571             'type' => 'leaf',
572             'value_type' => 'uniline'
573             },
574             'description' => 'Include the specified configuration file(s). Multiple pathnames may be
575             specified and each pathname may contain L<glob(7)> wildcards that will be
576             expanded and processed in lexical order. Files without absolute paths are
577             assumed to be in /etc/ssh An B<Include> directive may appear inside a B<Match>
578             block to perform conditional inclusion.',
579             'type' => 'list'
580             },
581             'IPQoS',
582             {
583             'assert' => {
584             '1_or_2' => {
585             'code' => 'return 1 unless defined $_;
586             my @v = (/(\\w+)/g);
587             return (@v < 3) ? 1 : 0;
588             ',
589             'msg' => 'value must not have more than 2 fields.'
590             },
591             'accepted_values' => {
592             'code' => 'return 1 unless defined $_;
593             my @v = (/(\\S+)/g);
594             my @good = grep {/^(af[1-4][1-3]|cs[0-7]|ef|lowdelay|throughput|reliability|\\d+)/} @v ;
595             return @good == @v ? 1 : 0;
596             ',
597             'msg' => 'Unexpected value "$_". Expected 1 or 2 occurences of: "af11", "af12", "af13", "af21", "af22",
598             "af23", "af31", "af32", "af33", "af41", "af42", "af43", "cs0", "cs1",
599             "cs2", "cs3", "cs4", "cs5", "cs6", "cs7", "ef", "lowdelay",
600             "throughput", "reliability", or numeric value.
601             '
602             }
603             },
604             'description' => 'Specifies the IPv4 type-of-service or DSCP class for the connection. Accepted
605             values are B<af11> B<af12> B<af13> B<af21> B<af22> B<af23> B<af31> B<af32>
606             B<af33> B<af41> B<af42> B<af43> B<cs0> B<cs1> B<cs2> B<cs3> B<cs4> B<cs5>
607             B<cs6> B<cs7> B<ef> B<le> B<lowdelay> B<throughput> B<reliability> a numeric
608             value, or B<none> to use the operating system default. This option may take one
609             or two arguments, separated by whitespace. If one argument is specified, it is
610             used as the packet class unconditionally. If two values are specified, the
611             first is automatically selected for interactive sessions and the second for
612             non-interactive sessions. The default is B<lowdelay> for interactive sessions
613             and B<throughput> for non-interactive sessions.',
614             'type' => 'leaf',
615             'upstream_default' => 'af21 cs1',
616             'value_type' => 'uniline'
617             },
618             'KbdInteractiveAuthentication',
619             {
620             'description' => 'Specifies whether to allow keyboard-interactive authentication. The default is
621             B<yes> The argument to this keyword must be B<yes> or B<no>
622             B<ChallengeResponseAuthentication> is a deprecated alias for this.',
623             'migrate_from' => {
624             'formula' => '$old',
625             'variables' => {
626             'old' => '- ChallengeResponseAuthentication'
627             }
628             },
629             'type' => 'leaf',
630             'upstream_default' => 'yes',
631             'value_type' => 'boolean',
632             'write_as' => [
633             'no',
634             'yes'
635             ]
636             },
637             'KerberosAuthentication',
638             {
639             'description' => 'Specifies whether the password provided by the user for
640             B<PasswordAuthentication> will be validated through the Kerberos KDC. To use
641             this option, the server needs a Kerberos servtab which allows the verification
642             of the KDC\'s identity. The default is B<no>',
643             'type' => 'leaf',
644             'upstream_default' => 'no',
645             'value_type' => 'boolean',
646             'write_as' => [
647             'no',
648             'yes'
649             ]
650             },
651             'LogLevel',
652             {
653             'choice' => [
654             'DEBUG',
655             'DEBUG1',
656             'DEBUG2',
657             'DEBUG3',
658             'ERROR',
659             'FATAL',
660             'INFO',
661             'QUIET',
662             'VERBOSE'
663             ],
664             'description' => 'Gives the verbosity level that is used when logging messages from L<sshd(8)>.
665             The possible values are: QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1,
666             DEBUG2, and DEBUG3. The default is INFO. DEBUG and DEBUG1 are equivalent.
667             DEBUG2 and DEBUG3 each specify higher levels of debugging output. Logging with
668             a DEBUG level violates the privacy of users and is not recommended.',
669             'type' => 'leaf',
670             'upstream_default' => 'INFO',
671             'value_type' => 'enum'
672             },
673             'MaxAuthTries',
674             {
675             'description' => 'Specifies the maximum number of authentication attempts permitted per
676             connection. Once the number of failures reaches half this value, additional
677             failures are logged. The default is 6.',
678             'type' => 'leaf',
679             'upstream_default' => '6',
680             'value_type' => 'integer'
681             },
682             'MaxSessions',
683             {
684             'description' => 'Specifies the maximum number of open shell, login or subsystem (e.g. sftp)
685             sessions permitted per network connection. Multiple sessions may be established
686             by clients that support connection multiplexing. Setting B<MaxSessions> to 1
687             will effectively disable session multiplexing, whereas setting it to 0 will
688             prevent all shell, login and subsystem sessions while still permitting
689             forwarding. The default is 10.',
690             'type' => 'leaf',
691             'upstream_default' => '10',
692             'value_type' => 'integer'
693             },
694             'PasswordAuthentication',
695             {
696             'description' => 'Specifies whether password authentication is allowed. The default is B<yes>',
697             'type' => 'leaf',
698             'upstream_default' => 'yes',
699             'value_type' => 'boolean',
700             'write_as' => [
701             'no',
702             'yes'
703             ]
704             },
705             'PermitEmptyPasswords',
706             {
707             'description' => 'When password authentication is allowed, it specifies whether the server allows
708             login to accounts with empty password strings. The default is B<no>',
709             'type' => 'leaf',
710             'upstream_default' => 'no',
711             'value_type' => 'boolean',
712             'write_as' => [
713             'no',
714             'yes'
715             ]
716             },
717             'PermitListen',
718             {
719             'cargo' => {
720             'type' => 'leaf',
721             'value_type' => 'uniline'
722             },
723             'description' => 'Specifies the addresses/ports on which a remote TCP port forwarding may listen.
724             The listen specification must be one of the following forms:
725              
726             B<PermitListen> I<port> B<PermitListen> I<host : port>
727              
728             Multiple permissions may be specified by separating them with whitespace. An
729             argument of B<any> can be used to remove all restrictions and permit any listen
730             requests. An argument of B<none> can be used to prohibit all listen requests.
731             The host name may contain wildcards as described in the PATTERNS section in
732             ssh_config5. The wildcard \'*\' can also be used in place of a port number to
733             allow all ports. By default all port forwarding listen requests are permitted.
734             Note that the B<GatewayPorts> option may further restrict which addresses may
735             be listened on. Note also that L<ssh(1)> will request a listen host of
736             \'\'localhost\'\' if no listen host was specifically requested, and this name is
737             treated differently to explicit localhost addresses of \'\'127.0.0.1\'\' and
738             \'\'::1\'\'',
739             'type' => 'list'
740             },
741             'PermitOpen',
742             {
743             'cargo' => {
744             'type' => 'leaf',
745             'value_type' => 'uniline'
746             },
747             'description' => 'Specifies the destinations to which TCP port forwarding is permitted. The
748             forwarding specification must be one of the following forms:
749              
750             B<PermitOpen> I<host : port> B<PermitOpen> I<IPv4_addr : port> B<PermitOpen>
751             I<[ IPv6_addr ] : port>
752              
753             Multiple forwards may be specified by separating them with whitespace. An
754             argument of B<any> can be used to remove all restrictions and permit any
755             forwarding requests. An argument of B<none> can be used to prohibit all
756             forwarding requests. The wildcard \'*\' can be used for host or port to allow all
757             hosts or ports respectively. Otherwise, no pattern matching or address lookups
758             are performed on supplied names. By default all port forwarding requests are
759             permitted.',
760             'type' => 'list'
761             },
762             'PermitRootLogin',
763             {
764             'choice' => [
765             'forced-commands-only',
766             'no',
767             'prohibit-password',
768             'yes'
769             ],
770             'description' => 'Specifies whether root can log in using L<ssh(1)>. The argument must be B<yes>
771             B<prohibit-password> B<forced-commands-only> or B<no> The default is
772             B<prohibit-password>
773              
774             If this option is set to B<prohibit-password> (or its deprecated alias,
775             B<without-password )> password and keyboard-interactive authentication are
776             disabled for root.
777              
778             If this option is set to B<forced-commands-only> root login with public key
779             authentication will be allowed, but only if the I<command> option has been
780             specified (which may be useful for taking remote backups even if root login is
781             normally not allowed). All other authentication methods are disabled for root.
782              
783             If this option is set to B<no> root is not allowed to log in.',
784             'type' => 'leaf',
785             'value_type' => 'enum'
786             },
787             'PermitTTY',
788             {
789             'description' => 'Specifies whether L<pty(4)> allocation is permitted. The default is B<yes>',
790             'type' => 'leaf',
791             'upstream_default' => 'yes',
792             'value_type' => 'boolean',
793             'write_as' => [
794             'no',
795             'yes'
796             ]
797             },
798             'PermitTunnel',
799             {
800             'choice' => [
801             'ethernet',
802             'no',
803             'point-to-point',
804             'yes'
805             ],
806             'description' => 'Specifies whether L<tun(4)> device forwarding is allowed. The argument must be
807             B<yes> B<point-to-point> (layer 3), B<ethernet> (layer 2), or B<no> Specifying
808             B<yes> permits both B<point-to-point> and B<ethernet> The default is B<no>
809              
810             Independent of this setting, the permissions of the selected L<tun(4)> device
811             must allow access to the user.',
812             'type' => 'leaf',
813             'upstream_default' => 'no',
814             'value_type' => 'enum'
815             },
816             'PermitUserRC',
817             {
818             'description' => 'Specifies whether any ~/.ssh/rc file is executed. The default is B<yes>',
819             'type' => 'leaf',
820             'upstream_default' => 'yes',
821             'value_type' => 'boolean',
822             'write_as' => [
823             'no',
824             'yes'
825             ]
826             },
827             'PubkeyAcceptedAlgorithms',
828             {
829             'description' => 'Specifies the signature algorithms that will be accepted for public key
830             authentication as a list of comma-separated patterns. Alternately if the
831             specified list begins with a \'+\' character, then the specified algorithms will
832             be appended to the default set instead of replacing them. If the specified list
833             begins with a \'-\' character, then the specified algorithms (including
834             wildcards) will be removed from the default set instead of replacing them. If
835             the specified list begins with a \'^\' character, then the specified algorithms
836             will be placed at the head of the default set. The default for this option is:
837             ssh-ed25519-cert-v01@openssh.com, ecdsa-sha2-nistp256-cert-v01@openssh.com,
838             ecdsa-sha2-nistp384-cert-v01@openssh.com,
839             ecdsa-sha2-nistp521-cert-v01@openssh.com, sk-ssh-ed25519-cert-v01@openssh.com,
840             sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, rsa-sha2-512-cert-v01@openssh.com,
841             rsa-sha2-256-cert-v01@openssh.com, ssh-ed25519, ecdsa-sha2-nistp256,
842             ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, sk-ssh-ed25519@openssh.com,
843             sk-ecdsa-sha2-nistp256@openssh.com, rsa-sha2-512, rsa-sha2-256
844              
845             The list of available signature algorithms may also be obtained using Qq ssh -Q
846             PubkeyAcceptedAlgorithms .',
847             'type' => 'leaf',
848             'value_type' => 'uniline'
849             },
850             'PubkeyAuthOptions',
851             {
852             'choice' => [
853             'none',
854             'touch-required',
855             'verify-required'
856             ],
857             'description' => 'Sets one or more public key authentication options. The supported keywords are:
858             B<none> (the default; indicating no additional options are enabled),
859             B<touch-required> and B<verify-required>
860              
861             The B<touch-required> option causes public key authentication using a FIDO
862             authenticator algorithm (i.e. B<ecdsa-sk> or B<ed25519-sk> to always require
863             the signature to attest that a physically present user explicitly confirmed the
864             authentication (usually by touching the authenticator). By default, L<sshd(8)>
865             requires user presence unless overridden with an authorized_keys option. The
866             B<touch-required> flag disables this override.
867              
868             The B<verify-required> option requires a FIDO key signature attest that the
869             user was verified, e.g. via a PIN.
870              
871             Neither the B<touch-required> or B<verify-required> options have any effect for
872             other, non-FIDO, public key types.',
873             'type' => 'leaf',
874             'value_type' => 'enum'
875             },
876             'PubkeyAuthentication',
877             {
878             'description' => 'Specifies whether public key authentication is allowed. The default is B<yes>',
879             'type' => 'leaf',
880             'upstream_default' => 'yes',
881             'value_type' => 'boolean',
882             'write_as' => [
883             'no',
884             'yes'
885             ]
886             },
887             'RekeyLimit',
888             {
889             'description' => 'Specifies the maximum amount of data that may be transmitted or received before
890             the session key is renegotiated, optionally followed by a maximum amount of
891             time that may pass before the session key is renegotiated. The first argument
892             is specified in bytes and may have a suffix of \'K\' \'M\' or \'G\' to indicate
893             Kilobytes, Megabytes, or Gigabytes, respectively. The default is between \'1G\'
894             and \'4G\' depending on the cipher. The optional second value is specified in
895             seconds and may use any of the units documented in the I<TIME FORMATS> section.
896             The default value for B<RekeyLimit> is B<default none> which means that
897             rekeying is performed after the cipher\'s default amount of data has been sent
898             or received and no time based rekeying is done.',
899             'type' => 'leaf',
900             'value_type' => 'uniline'
901             },
902             'RevokedKeys',
903             {
904             'description' => 'Specifies revoked public keys file, or B<none> to not use one. Keys listed in
905             this file will be refused for public key authentication. Note that if this file
906             is not readable, then public key authentication will be refused for all users.
907             Keys may be specified as a text file, listing one public key per line, or as an
908             OpenSSH Key Revocation List (KRL) as generated by ssh-keygen1. For more
909             information on KRLs, see the KEY REVOCATION LISTS section in ssh-keygen1.',
910             'type' => 'leaf',
911             'value_type' => 'uniline'
912             },
913             'SetEnv',
914             {
915             'description' => 'Specifies one or more environment variables to set in child sessions started by
916             L<sshd(8)> as \'\'NAME=VALUE\'\' The environment value may be quoted (e.g. if it
917             contains whitespace characters). Environment variables set by B<SetEnv>
918             override the default environment and any variables specified by the user via
919             B<AcceptEnv> or B<PermitUserEnvironment>',
920             'type' => 'leaf',
921             'value_type' => 'uniline'
922             },
923             'StreamLocalBindMask',
924             {
925             'description' => 'Sets the octal file creation mode mask (umask) used when creating a Unix-domain
926             socket file for local or remote port forwarding. This option is only used for
927             port forwarding to a Unix-domain socket file.
928              
929             The default value is 0177, which creates a Unix-domain socket file that is
930             readable and writable only by the owner. Note that not all operating systems
931             honor the file mode on Unix-domain socket files.',
932             'type' => 'leaf',
933             'value_type' => 'uniline'
934             },
935             'StreamLocalBindUnlink',
936             {
937             'description' => 'Specifies whether to remove an existing Unix-domain socket file for local or
938             remote port forwarding before creating a new one. If the socket file already
939             exists and B<StreamLocalBindUnlink> is not enabled, B<sshd> will be unable to
940             forward the port to the Unix-domain socket file. This option is only used for
941             port forwarding to a Unix-domain socket file.
942              
943             The argument must be B<yes> or B<no> The default is B<no>',
944             'type' => 'leaf',
945             'upstream_default' => 'no',
946             'value_type' => 'boolean',
947             'write_as' => [
948             'no',
949             'yes'
950             ]
951             },
952             'TrustedUserCAKeys',
953             {
954             'description' => 'Specifies a file containing public keys of certificate authorities that are
955             trusted to sign user certificates for authentication, or B<none> to not use
956             one. Keys are listed one per line; empty lines and comments starting with \'#\'
957             are allowed. If a certificate is presented for authentication and has its
958             signing CA key listed in this file, then it may be used for authentication for
959             any user listed in the certificate\'s principals list. Note that certificates
960             that lack a list of principals will not be permitted for authentication using
961             B<TrustedUserCAKeys> For more details on certificates, see the CERTIFICATES
962             section in ssh-keygen1.',
963             'type' => 'leaf',
964             'value_type' => 'uniline'
965             },
966             'UnusedConnectionTimeout',
967             {
968             'description' => 'Specifies whether and how quickly L<sshd(8)> should close client connections
969             with no open channels. Open channels include active shell, command execution or
970             subsystem sessions, connected network, socket, agent or X11 forwardings.
971             Forwarding listeners, such as those from the L<ssh(1)> -B<R> flag, are not
972             considered as open channels and do not prevent the timeout. The timeout value
973             is specified in seconds or may use any of the units documented in the I<TIME
974             FORMATS> section.
975              
976             Note that this timeout starts when the client connection completes user
977             authentication but before the client has an opportunity to open any channels.
978             Caution should be used when using short timeout values, as they may not provide
979             sufficient time for the client to request and open its channels before
980             terminating the connection.
981              
982             The default B<none> is to never expire connections for having no open channels.
983             This option may be useful in conjunction with B<ChannelTimeout>',
984             'type' => 'leaf',
985             'value_type' => 'uniline'
986             },
987             'X11DisplayOffset',
988             {
989             'description' => 'Specifies the first display number available for L<sshd(8)>Ns\'s X11 forwarding.
990             This prevents sshd from interfering with real X11 servers. The default is 10.',
991             'type' => 'leaf',
992             'value_type' => 'uniline'
993             },
994             'X11Forwarding',
995             {
996             'description' => 'Specifies whether X11 forwarding is permitted. The argument must be B<yes> or
997             B<no> The default is B<no>
998              
999             When X11 forwarding is enabled, there may be additional exposure to the server
1000             and to client displays if the L<sshd(8)> proxy display is configured to listen
1001             on the wildcard address (see B<X11UseLocalhost )> though this is not the
1002             default. Additionally, the authentication spoofing and authentication data
1003             verification and substitution occur on the client side. The security risk of
1004             using X11 forwarding is that the client\'s X11 display server may be exposed to
1005             attack when the SSH client requests forwarding (see the warnings for
1006             B<ForwardX11> in ssh_config5). A system administrator may have a stance in
1007             which they want to protect clients that may expose themselves to attack by
1008             unwittingly requesting X11 forwarding, which can warrant a B<no> setting.
1009              
1010             Note that disabling X11 forwarding does not prevent users from forwarding X11
1011             traffic, as users can always install their own forwarders.',
1012             'type' => 'leaf',
1013             'upstream_default' => 'no',
1014             'value_type' => 'boolean',
1015             'write_as' => [
1016             'no',
1017             'yes'
1018             ]
1019             },
1020             'X11UseLocalhost',
1021             {
1022             'description' => 'Specifies whether L<sshd(8)> should bind the X11 forwarding server to the
1023             loopback address or to the wildcard address. By default, sshd binds the
1024             forwarding server to the loopback address and sets the hostname part of the
1025             B<DISPLAY> environment variable to B<localhost> This prevents remote hosts from
1026             connecting to the proxy display. However, some older X11 clients may not
1027             function with this configuration. B<X11UseLocalhost> may be set to B<no> to
1028             specify that the forwarding server should be bound to the wildcard address. The
1029             argument must be B<yes> or B<no> The default is B<yes>',
1030             'type' => 'leaf',
1031             'upstream_default' => 'yes',
1032             'value_type' => 'boolean',
1033             'write_as' => [
1034             'no',
1035             'yes'
1036             ]
1037             },
1038             'AuthorizedKeysFile2',
1039             {
1040             'cargo' => {
1041             'type' => 'leaf',
1042             'value_type' => 'uniline'
1043             },
1044             'description' => 'This parameter is now ignored by Ssh',
1045             'status' => 'deprecated',
1046             'type' => 'list'
1047             },
1048             'ChallengeResponseAuthentication',
1049             {
1050             'status' => 'deprecated',
1051             'type' => 'leaf',
1052             'value_type' => 'boolean'
1053             },
1054             'KeyRegenerationInterval',
1055             {
1056             'status' => 'deprecated',
1057             'type' => 'leaf',
1058             'value_type' => 'uniline'
1059             },
1060             'Protocol',
1061             {
1062             'status' => 'deprecated',
1063             'type' => 'leaf',
1064             'value_type' => 'uniline'
1065             },
1066             'RDomain',
1067             {
1068             'status' => 'deprecated',
1069             'type' => 'leaf',
1070             'value_type' => 'uniline'
1071             },
1072             'RSAAuthentication',
1073             {
1074             'status' => 'deprecated',
1075             'type' => 'leaf',
1076             'value_type' => 'uniline'
1077             },
1078             'RhostsRSAAuthentication',
1079             {
1080             'status' => 'deprecated',
1081             'type' => 'leaf',
1082             'value_type' => 'uniline'
1083             },
1084             'UsePrivilegeSeparation',
1085             {
1086             'status' => 'deprecated',
1087             'type' => 'leaf',
1088             'value_type' => 'uniline'
1089             }
1090             ],
1091             'generated_by' => 'parse-man.pl from sshd_system 9.4p1 doc',
1092             'license' => 'LGPL2',
1093             'name' => 'Sshd::MatchElement'
1094             }
1095             ]
1096             ;
1097