]> git.proxmox.com Git - mirror_frr.git/blame - doc/user/vtysh.rst
vtysh: use poll/callback-driven readline interface
[mirror_frr.git] / doc / user / vtysh.rst
CommitLineData
0efdf0fe 1.. _vty-shell:
42fc5d26
QY
2
3*********
4VTY shell
5*********
6
c1a54c05
QY
7.. program:: configure
8
9*vtysh* provides a combined frontend to all FRR daemons in a single combined
10session. It is enabled by default at build time, but can be disabled through
11the :option:`--disable-vtysh` option to the configure script.
12
13*vtysh* has a configuration file, :file:`vtysh.conf`. The location of that
14file cannot be changed from |INSTALL_PREFIX_ETC| since it contains options
15controlling authentication behavior. This file will also not be written by
16configuration-save commands, it is intended to be updated manually by an
17administrator with an external editor.
18
19.. warning::
20
21 This also means the ``hostname`` and ``banner motd`` commands (which both do
22 have effect for vtysh) need to be manually updated in :file:`vtysh.conf`.
23
42fc5d26 24
874f579d
MS
25.. clicmd:: copy FILENAME running-config
26
27 Process and load a configuration file manually; each line in the
28 file is read and processed as if it were being typed (or piped) to
29 vtysh.
30
31
afec8750
DL
32Pager usage
33===========
34
35*vtysh* can call an external paging program (e.g. *more* or *less*) to
36paginate long output from commands. This feature used to be enabled by
37default but is now controlled by the ``VTYSH_PAGER`` environment variable
38and the :clicmd:`terminal paginate` command:
39
40.. envvar:: VTYSH_PAGER
41
42 If set, the ``VTYSH_PAGER`` environment variable causes *vtysh* to pipe
43 output from commands through the given command. Note that this happens
44 regardless of the length of the output. As such, standard pager behavior
45 (particularly waiting at the end of output) tends to be annoying to the
46 user. Using ``less -EFX`` is recommended for a better user experience.
47
48 If this environment variable is unset, *vtysh* defaults to not using any
49 pager.
50
51 This variable should be set by the user according to their preferences,
52 in their :file:`~/.profile` file.
53
03750f1e 54.. clicmd:: terminal paginate
afec8750
DL
55
56 Enables/disables vtysh output pagination. This command is intended to
57 be placed in :file:`vtysh.conf` to set a system-wide default. If this
58 is enabled but ``VTYSH_PAGER`` is not set, the system default pager
59 (likely ``more`` or ``/usr/bin/pager``) will be used.
60
61
42fc5d26
QY
62Permissions and setup requirements
63==================================
64
65*vtysh* connects to running daemons through Unix sockets located in
c1a54c05
QY
66|INSTALL_PREFIX_STATE|. Running vtysh thus requires access to that directory,
67plus membership in the |INSTALL_VTY_GROUP| group (which is the group that the
68daemons will change ownership of their sockets to).
42fc5d26 69
c1a54c05
QY
70To restrict access to FRR configuration, make sure no unauthorized users are
71members of the |INSTALL_VTY_GROUP| group.
42fc5d26 72
a3ff0311
QY
73.. warning::
74
75 VTYSH implements a CLI option ``-u, --user`` that disallows entering the
76 characters "en" on the command line, which ideally restricts access to
77 configuration commands. However, VTYSH was never designed to be a privilege
78 broker and is not built using secure coding practices. No guarantees of
79 security are provided for this option and under no circumstances should this
80 option be used to provide any semblance of security or read-only access to
81 FRR.
82
42fc5d26
QY
83PAM support (experimental)
84--------------------------
85
c1a54c05
QY
86vtysh has working (but rather useless) PAM support. It will perform an
87"authenticate" PAM call using |PACKAGE_NAME| as service name. No other
88(accounting, session, password change) calls will be performed by vtysh.
89
90Users using vtysh still need to have appropriate access to the daemons' VTY
91sockets, usually by being member of the |INSTALL_VTY_GROUP| group. If they
92have this membership, PAM support is useless since they can connect to daemons
93and issue commands using some other tool. Alternatively, the *vtysh* binary
94could be made SGID (set group ID) to the |INSTALL_VTY_GROUP| group.
95
96.. warning::
97
98 No security guarantees are made for this configuration.
42fc5d26 99
42fc5d26 100
c1a54c05 101.. clicmd:: username USERNAME nopassword
42fc5d26 102
42fc5d26 103 If PAM support is enabled at build-time, this command allows disabling the
c1a54c05 104 use of PAM on a per-user basis. If vtysh finds that an user is trying to
42fc5d26
QY
105 use vtysh and a "nopassword" entry is found, no calls to PAM will be made
106 at all.
107
108
0efdf0fe 109.. _integrated-configuration-mode:
42fc5d26
QY
110
111Integrated configuration mode
112=============================
113
114Integrated configuration mode uses a single configuration file,
c1a54c05 115:file:`frr.conf`, for all daemons. This replaces the individual files like
42fc5d26
QY
116:file:`zebra.conf` or :file:`bgpd.conf`.
117
c1a54c05
QY
118:file:`frr.conf` is located in |INSTALL_PREFIX_ETC|. All daemons check for the
119existence of this file at startup, and if it exists will not load their
120individual configuration files. Instead, ``vtysh -b`` must be invoked to
121process :file:`frr.conf` and apply its settings to the individual daemons.
122
123.. warning::
124
125 *vtysh -b* must also be executed after restarting any daemon.
42fc5d26 126
42fc5d26
QY
127
128Configuration saving, file ownership and permissions
129----------------------------------------------------
130
c1a54c05 131The :file:`frr.conf` file is not written by any of the daemons; instead *vtysh*
d1e7591e 132contains the necessary logic to collect configuration from all of the daemons,
c1a54c05 133combine it and write it out.
42fc5d26 134
c1a54c05 135.. warning::
42fc5d26 136
c1a54c05
QY
137 Daemons must be running for *vtysh* to be able to collect their
138 configuration. Any configuration from non-running daemons is permanently
139 lost after doing a configuration save.
42fc5d26 140
c1a54c05
QY
141Since the *vtysh* command may be running as ordinary user on the system,
142configuration writes will be tried through *watchfrr*, using the ``write
143integrated`` command internally. Since *watchfrr* is running as superuser,
144*vtysh* is able to ensure correct ownership and permissions on
145:file:`frr.conf`.
42fc5d26 146
c1a54c05
QY
147If *watchfrr* is not running or the configuration write fails, *vtysh* will
148attempt to directly write to the file. This is likely to fail if running as
149unprivileged user; alternatively it may leave the file with incorrect owner or
150permissions.
42fc5d26 151
c1a54c05
QY
152Writing the configuration can be triggered directly by invoking *vtysh -w*.
153This may be useful for scripting. Note this command should be run as either the
154superuser or the FRR user.
42fc5d26 155
c1a54c05
QY
156We recommend you do not mix the use of the two types of files. Further, it is
157better not to use the integrated :file:`frr.conf` file, as any syntax error in
158it can lead to /all/ of your daemons being unable to start up. Per daemon files
159are more robust as impact of errors in configuration are limited to the daemon
160in whose file the error is made.
42fc5d26 161
c1a54c05 162.. clicmd:: service integrated-vtysh-config
42fc5d26 163
42fc5d26 164
c1a54c05
QY
165 Control whether integrated :file:`frr.conf` file is written when
166 'write file' is issued.
42fc5d26 167
c1a54c05
QY
168 These commands need to be placed in :file:`vtysh.conf` to have any effect.
169 Note that since :file:`vtysh.conf` is not written by FRR itself, they
170 therefore need to be manually placed in that file.
42fc5d26 171
c1a54c05 172 This command has 3 states:
42fc5d26 173
42fc5d26 174
c1a54c05 175 service integrated-vtysh-config
42fc5d26
QY
176 *vtysh* will always write :file:`frr.conf`.
177
178
c1a54c05 179 no service integrated-vtysh-config
42fc5d26
QY
180 *vtysh* will never write :file:`frr.conf`; instead it will ask
181 daemons to write their individual configuration files.
182
c1a54c05
QY
183 Neither option present (default)
184 *vtysh* will check whether :file:`frr.conf` exists. If it does,
185 configuration writes will update that file. Otherwise, writes are performed
42fc5d26
QY
186 through the individual daemons.
187
c1a54c05
QY
188 This command is primarily intended for packaging/distribution purposes, to
189 preset one of the two operating modes and ensure consistent operation across
190 installations.
42fc5d26 191
c1a54c05 192.. clicmd:: write integrated
42fc5d26 193
c1a54c05
QY
194 Unconditionally (regardless of ``service integrated-vtysh-config`` setting)
195 write out integrated :file:`frr.conf` file through *watchfrr*. If *watchfrr*
196 is not running, this command is unavailable.
42fc5d26 197
c1a54c05 198.. warning::
42fc5d26 199
c1a54c05
QY
200 Configuration changes made while some daemon is not running will be
201 invisible to that daemon. The daemon will start up with its saved
202 configuration (either in its individual configuration file, or in
203 :file:`frr.conf`). This is particularly troublesome for route-maps and
204 prefix lists, which would otherwise be synchronized between daemons.
76bd1499 205