@node VTY shell
@comment  node-name,  next,  previous,  up
@chapter VTY shell

@command{vtysh} is integrated shell of Zebra software.

To use vtysh please specify ---enable-vtysh to configure script.  To use
PAM for authentication use ---with-libpam option to configure script.

vtysh only searches @value{INSTALL_PREFIX_ETC} path for vtysh.conf which
is the vtysh configuration file.  Vtysh does not search current
directory for configuration file because the file includes user
authentication settings.

Currently, vtysh.conf has only two commands.

@deffn {Command} {username @var{username} nopassword} {}

With this set, user foo does not need password authentication for user vtysh.
With PAM vtysh uses PAM authentication mechanism.

If vtysh is compiled without PAM authentication, every user can use vtysh
without authentication. vtysh requires read/write permission
to the various daemons vty sockets, this can be accomplished through use
of unix groups and the --enable-vty-group configure option.

@end deffn

@deffn {Command} {write-conf daemon} {}
Instruct daemons to write out their config files when 'write file'
is issued.
@end deffn
@deffn {Command} {write-conf integrated} {}
Write out integrated Zebra.conf file when 'write file' is issued.
@end deffn

This command controls the behaviour of vtysh when it is told
to write out the configuration.  If @command{write-conf integrated} is
set, the daemon will write out a Zebra.conf with all daemons' commands
integrated into it. If @command{write-conf daemon} is set, vtysh
will instruct each daemon to write out their config files.

Vtysh per default behaves as if @command{write-conf daemon} is set. Note
that both may be set at same time if one wishes to have both
Zebra.conf and daemon specific files written out. Further, note that the
daemons are hard-coded to first look for the integrated Zebra.conf
file before looking for their own file.

We recommend you do not mix the use of the two types of files.
Further, it is better not to use the integrated Zebra.conf file,
as any syntax error in it can lead to /all/ of your daemons being unable
to start up. Per daemon files are more robust as impact of errors in
configuration are limited to the daemon in whose file the error is made.
