conserver - console server daemon
] [-a type
] [-M master
] [-p port
] [-c cred
] [-C config
] [-L logfile
] [-O min
is the daemon that manages remote access to system consoles by
multiple users via the console
(1) client program and (optionally) log
the console output. It can connect to consoles via local serial ports, Unix
domain sockets, TCP sockets (for terminal servers and the like), or any
When started, conserver
reads the conserver.cf
(5) file for details
of each console. The console type, logging options, serial or network
parameters, and user access levels are just a few of the things that can be
specified. Command-line options are then applied, possibly overriding
(5) settings. Conserver
categorizes consoles into
two types: those it should actively manage, and those it should just know
about, so it can refer clients to other conserver
instances. If the
value of a console matches the hostname or ip address of the
local machine, conserver
will actively manage the console. Otherwise,
it's considered a ``remote'' console and managed by a different server.
forks a child for each group of consoles it must manage and
assigns each process a port number to listen on. The maximum number of
consoles managed by each child process is set using the -m
(1) client program communicates with the master console server
process to find the port (and host, in a multi-server configuration) on which
the appropriate child is listening. Conserver
from clients based on the host access section of its conserver.cf
file, restricts users based on the console access lists of the
(5) file, and authenticates users against its
(5) file. Conserver
can also restrict clients
using the tcp-wrappers package (enabled using --with-libwrap
authentication is done before consulting the conserver.cf
When Unix domain sockets are used between the client and server (enabled using
), authentication checks are done on the hardcoded address
``127.0.0.1''. Automatic client redirection is also disabled (as if the
option was used) since the client cannot communicate with remote
servers. The directory used to hold the sockets is checked to make sure it's
empty when the server starts. The server will not
remove any files in
the directory itself, just in case the directory is accidentally specified as
``/etc'' or some other critical location. The server will do its best to
remove all the sockets when it shuts down, but it could stop ungracefully
(crash, ``kill -9'', etc) and leave files behind. It would then be up to the
admin (or a creative startup script) to clean up the directory before the
server will start again.
completely controls any connection to a console. All escape
sequences given by the user to console
are passed to the server without
interpretation. The server recognizes and processes all escape sequences.
parent process will automatically respawn any child process
that dies. The following signals are propagated by the parent process to its
- Close all connections and exit.
- Reread the configuration file. New consoles are managed by
forking off new children, deleted consoles (and their clients) are
dropped, and changes to consoles are done "in place", resetting
the console port (bringing it down and up) only when necessary. The
console name is used to determine when consoles have been
added/removed/changed. All actions performed by SIGUSR2 are also
- Try to connect to any consoles marked as down. This can
come in handy if you had a terminal server (or more) that wasn't accepting
connections at startup and you want conserver to try to reconnect
to all those downed ports.
- Close and reopen all console logfiles and, if in daemon
mode (-d option), the error logfile (see the -L option). All
actions performed by SIGUSR1 are also performed.
Consoles which have no current client connection might produce important error
messages. With the -u
option, these ``unloved'' errors are labeled with
a machine name and output on stdout (or, in daemon mode, to the logfile). This
allows a live operator or an automated log scanner to find otherwise unseen
errors by watching in a single location.
must be run as root if it is to bind to a port under 1024 or if
it must read protected password files (like shadow passwords) for
authentication (see conserver.passwd
(5)). Otherwise, it may be run by
any user, with -p
used to specify a port above 1024.
If encryption has been built into the code (--with-openssl
client connections (without certificate exchanges) happen by default. To add
certificate exchanges, use the -c
option with the client and server.
For authentication of the certificates to work, the signing certificate must
be properly trusted, which usually means the public portion is in
(on both the client and server sides).
See the sample self-signing certificate making script
for further clues. To allow non-encrypted client
connections (in addition to encrypted client connections), use the -E
Options may be given as separate arguments (e.g., -n -d
clustered (e.g., -nd
). Options and their arguments may be separated by
optional white space. Option arguments containing spaces or other characters
special to the shell must be quoted.
- Strip the high bit off of all data received, whether from
the console client or from the console device, before any
- Set the default access type for incoming connections from
console clients: `r' for refused (the default), `a'
for allowed, or `t' for trusted. This applies to hosts for which no
matching entry is found in the access section of
- Set the base port for children to listen on. Each child
starts looking for free ports at port and working upward, trying a
maximum number of ports equal to twice the maximum number of groups. If no
free ports are available in that range, conserver exits. By
default, conserver lets the operating system choose a free
- Load an SSL certificate and key from the PEM encoded file
- Read configuration information from the file config.
The default config may be changed at compile time using the
- Become a daemon. Disconnects from the controlling terminal
and sends all output (including any debug output) to the logfile (see
- Enable debugging output, sent to stderr. Multiple -D
options increases debug output.
- If encryption has been built into the code
(--with-openssl), encrypted client connections are a requirement.
This option allows non-encrypted clients (as well as encrypted clients) to
connect to consoles.
- Do not automatically reinitialize failed (unexpectedly
closed) consoles. If the console is a program (`|' syntax) and it closes
with a zero exit status, the console is reinitialized regardless of this
option. Without this option, a console is immediately reopened, and if
that fails, retried every minute until successful. This option has no
effect on the -o and -O options.
- Output a brief help message.
- Initiate console connections on demand (and close them when
- Log errors and informational messages to logfile
after startup in daemon mode (-d). This option does not apply when
not running in daemon mode. The default logfile may be changed at
compile time using the --with-logfile option.
- Set the maximum consoles managed per process. The default
max may be changed at compile time using the --with-maxmemb
- Normally, this allows conserver to bind to a particular IP
address (like `127.0.0.1') instead of all interfaces. The default is to
bind to all addresses. However, if --with-uds was used to enable
Unix domain sockets for client/server communication, this points conserver
to the directory where it should store the sockets. The default
master directory (``/tmp/conserver'') may be changed at
compile time using the --with-uds option.
- Obsolete (now a no-op); see -u.
- Normally, a client connecting to a ``downed'' console does
just that. Using this option, the server will automatically attempt to
open (``bring up'') the console when the client connects.
- Enable periodic attempts (every min minutes) to open
(``bring up'') all downed consoles (similar to sending a SIGUSR1). Without
this option, or if min is zero, no periodic attempts occur.
- Set the TCP port for the master process to listen on. This
may be either a port number or a service name. The default port,
``conserver'' (typically 782), may be changed at compile time using the
--with-port option. If the --with-uds option was used, this
option is ignored.
- Read the table of authorized user data from the file
passwd. The default passwd may be changed at compile time
using the --with-pwdfile option.
- Disable automatic client redirection to other conserver
hosts. This means informational commands like -w and -i will
only show the status of the local conserver host and attempts to connect
to remote consoles will result in an informative message to the user.
- Do not run the server, just perform a syntax check of
configuration file and exit with a non-zero value if there is an error.
Using more than one -S will cause conserver to output various
information about each console in 5 colon-separated fields, enclosed in
curly-braces. The philosophy behind the output is to provide information
to allow external detection of multiple consoles access the same physical
port. Since this is highly environment-specific, conserver cannot
do the check internally.
- The name of the console.
- The hostname of the master conserver host for the
- The console aliases in a comma-separated list.
- The type of console. Values will be a `/' for a local
device, `|' for a command, `!' for a remote port, `%' for a Unix domain
socket, and `#' for a noop console.
- Multiple values are comma-separated and depend on the type
of the console. Local devices will have the values of the device file and
baud rate/parity. Commands will have string to invoke. Remote ports will
have the values of the remote hostname and port number. Unix domain
sockets will have the path to the socket. Noop consoles will have
- Send unloved console output to conserver's stdout
(which, in daemon mode, is redirected to the logfile). This applies to all
consoles to which no user is attached, independent of whether logging of
individual consoles is enabled via conserver.cf entries.
- Copy all console data to the ``unified'' logfile.
The output is the same as the -u output, but all consoles, not just
those without a user, are logged. Each line of output is prefixed with the
console name. If a user is attached read/write, a `*' is appended to the
console name, to allow log watching utilites to ignore potential
- Echo the configuration as it is being read (be
- Output the version number and settings of the
conserver program and then exit.
The protocol used to interact with the conserver
daemon has two basic
styles. The first style is the initial line-based mode, which occurs before
connecting to a console. The second style is the character-based,
escape-sequence mode, while connected to a console.
The initial line-based mode begins the same for both the master process and its
children. Upon a successful (non-rejected) client connection, an ``ok'' is
sent. The client then issues a command and the server responds to it with a
result string (``ok'' being the sign of success for most commands). The
commands available are ``help'', ``ssl'' (if SSL was built into the code),
``login'', and ``exit''. Using the ``login'' command, the client authenticates
and gains access to the extended command set. This is where the master process
and its children differ. The master process gives the client access to global
commands, and the child provides commands for interacting with the consoles it
manages. The ``help'' command, in both cases, will provide a complete list of
commands and a short description of what they do.
The second, character-based, style of interaction occurs when the client issues
the ``call'' command with a child process. This command connects the client to
a console and, at that point, relays all traffic between the client and the
console. There is no more command-based interaction between the client and the
server, any interaction with the server is done with the default escape
This is, by no means, a complete description of the entire client/server
interaction. It is, however, a brief explanation in order to give a idea of
what the program does. See the PROTOCOL
file in the distribution for
The following default file locations may be overridden at compile time or by the
command-line options described above. Run conserver -V
to see the
defaults set at compile time.
- description of console terminal lines and client host
access levels; see conserver.cf(5).
- users allowed to access consoles; see
- the master conserver process ID
- log of errors and informational messages
- directory to hold Unix domain sockets (if enabled)
Additionally, output from individual consoles may be logged to separate files
specified in conserver.cf
I'm sure there are bugs, I just don't know where they are. Please let me know if
you find any.
Thomas A. Fine, Ohio State Computer Science
Kevin S Braunsdorf, Purdue University Computing Center
Bryan Stansell, conserver.com