CONSERVER.CF(5)
๐ธ NAME ๐ธ
conserver.cf โ the console configuration file for conserver(8). It's literally the group chat rules for your console server, bestie ๐
โจ DESCRIPTION โจ
okay so here's the tea: the format of the conserver.cf file is made up of named blocks of keyword/value pairs, comments, and optional whitespace so you can format it however you want. The block types and the keywords are pre-defined โ you don't get to invent them โ and they're all explained down in the BLOCKS section. A comment is just an unquoted pound-sign that runs all the way to a newline. And if you want the full rundown on whitespace and quoting, the PARSER section has you covered ๐ซถ
Let me first show you a sample block with a couple of keyword/value pairs to make the description a bit simpler to understand.
console simple { master localhost; type exec; rw *; }
That right there is actually a fully functional conserver.cf file (if certain conditions are met... and if you can list those conditions, you can probably skip to the BLOCKS section ๐).
Our example is made up of a console-block named simple'' with three keyword/value pairs. What it does: it defines a console named simple'', makes the master of that console the host ``localhost'', makes the type an exec-style console, and gives every user read/write permission. This is the generic format of the file:
block-type block-name { keyword value; ... }
Now, to show you what adding comments and whitespace looks like, here's the same example reformatted (but functionally equivalent, no cap):
# define a console named "simple"
console simple {
# setting all required values...
master localhost;
type exec; # exec-style console
rw *; # allow any username
}
๐ PARSER ๐
The parser has six characters that it considers special. They are: {'', }'', ;'', #'', \'', and "''. The first three (hereby called tokens) define the format of the configuration blocks and get used as word separators. The next one is the comment character. And the last two? Quoting characters, obviously ๐
Word separation happens when the parser hits an unquoted token and, in certain cases, whitespace. And here's the plot twist: whitespace is only used as a word separator when the parser is looking for a block-type or a keyword. When it's looking for a block-name or a value, whitespace is just like any other character โ which means you can embed whitespace in a block-name or value without having to quote it. Iconic. Example:
default my defs { rw *; include other defs ; }
So the block-type is default'', the block-name is my defs'', and the value for the keyword include'' is other defs''. Whitespace around tokens gets ignored, which is why you get other defs'' and <hotpink>not</hotpink> other defs '' as the value. Slay.
The only way to use one of the special characters as part of a block-name or value is to quote it.
Quoting is a simple matter of prefixing a character with a backslash or surrounding a group of characters with double-quotes. If a character is prefixed by a backslash, the next character is a literal (so \\'' produces a '', \"'' produces a "'', \{'' produces a {'', etc.). For double-quoted strings, all characters are literal except for ``"'', which embeds a double-quote.
Adding a variety of quotes to our example without changing the meaning of things, we get:
"defa"ult my\ defs { rw *; in\clude "other defs" ; }
There is one special line the parser recognizes: a ``#include'' statement. It is of the form:
#include filename
Any whitespace around filename is ignored, but whitespace embedded inside is preserved. Everything in filename is taken literally, so none of the normal parser quoting applies. The #include must begin in ``column 0'' โ no whitespace is allowed between it and the start of the physical line. And there's an include file depth limit of 10 to prevent infinite recursion. (we love a safety net ๐ง)
๐ฆ BLOCKS ๐ฆ
access hostname|ipaddrโ define an access block for the host named hostname or using the address ipaddr. If the value of ``*'' is used, the access block gets applied to all conserver hosts. Access lists work in a first-match fashion (top down), so the order is important โ do not skip this.admin [!]username[,...]|""โ define a list of users making up the admin list for the console server. If username matches a previously defined group name, all members of the previous group are applied to the admin list (with access reversed if prefixed with a!''). If *username* doesn't match a previously defined group and *username* begins with@'', the name (minus the@'') is checked against the host's group database, and all users found in that group will be granted (or denied, if prefixed with!'') access. If username doesn't match a previous group and doesn't begin with@'', the users will be granted (or denied, if prefixed with!'') access. And if the null string (``""'') is used, any users previously defined for the console server's admin list are removed.allowed hostname[,...]โ the list of hostnames are added to the ``allowed'' list, which grants connections from the hosts but requires username authentication. ๐include accessgroupโ the access lists defined using the name accessgroup are applied to the current access block. Heads up: the included access block has to be previously defined.limited [!]username[,...]|""โ define a list of users with limited functionality on the console server. These users will not be allowed to suspend their connection, shift to another console, or attach to a local command. If username matches a previously defined group name, all members of the previous group are applied to the admin list (yes, it says admin list here, i'm just the messenger ๐) (with access reversed if prefixed with a!''). If *username* doesn't match a previously defined group and *username* begins with@'', the name (minus the@'') is checked against the host's group database, and all users found in that group will be granted (or denied, if prefixed with!'') access. If username doesn't match a previous group and doesn't begin with@'', the users will be granted (or denied, if prefixed with!'') access. And if the null string (``""'') is used, any users previously defined for the console server's limited list are removed.rejected hostname[,...]โ the list of hostnames are added to the ``rejected'' list, which rejects connections from the hosts. bye โtrusted hostname[,...]โ the list of hostnames are added to the ``trusted'' list, which grants connections from the hosts without username authentication.
break nโ define a break sequence where (1 <= n <= 9) or (a <= n <= z). Break sequences are accessed via the ``^Ecln'' client escape sequence. ๐confirm yes|true|on|no|false|offโ set whether or not to ask the client for confirmation before sending the break sequence. The default is ``no''.delay nโ set the time delay for the\dsequence to n milliseconds. The default time delay is250ms.string breakseqโ assign the string breakseq to the specified slot n. A break sequence is a simple character string with the exception of\and^:
\a alert
\b backspace
\d delay specified by the delay option.
\f form-feed
\n newline
\r carriage-return
\t tab
\v vertical-tab
\z serial break
\\ backslash
\^ circumflex
\ooo octal representation of a character (where
ooo is one to three octal digits)
\c character c
^? delete
^c control character (c is ``and''ed with 0x1f)
config hostname|ipaddrโ define a configuration block for the host named hostname or using the address ipaddr. If the value of ``*'' is used, the configuration block gets applied to all conserver hosts.autocomplete yes|true|on|no|false|offโ turn the console name autocompletion feature on or off. If autocompletion is on, a client can use any unique leading portion of a console name when connecting to a console. Autocompletion is on by default.defaultaccess rejected|trusted|allowedโ set the default access permission for all hosts not matched by an access list (see the-acommand-line flag).daemonmode yes|true|on|no|false|offโ set whether or not to become a daemon when run (see the-dcommand-line flag).initdelay numberโ set the number of seconds between console initializations. All consoles with the same host value will be throttled as a group (those without a host value are their own group). In other words, each console within a group will only be initialized after number seconds passes from the previous initialization of a console in that group. Different throttle groups are initialized simultaneously.
โ ๏ธ One warning, bestie: since consoles are split up and managed by separate conserver processes, it's possible for more than one conserver process to have a throttle group based on a particular host value. If that happens, each conserver process will throttle their groups independently of the other conserver processes, which results in a more rapid initialization (per host value) than one might otherwise expect.
If number is zero, all consoles are initialized without delay.
logfile filenameโ set the logfile to write to when in daemon mode (see the-Lcommand-line flag).passwdfile filenameโ set the password file location used for authentication (see the-Pcommand-line flag).
primaryport number|nameโ sets the port the master conserver process lives on (that's the-pcommand-line flag, bestie ๐ ).redirect yes|true|on|no|false|offโ flips redirection on or off (the-Rcommand-line flag).reinitcheck number[s|m]โ how many minutes between reinitialization checks (yep, the-Ocommand-line flag). If you slap ansormafternumber, that time gets read as seconds or minutes instead. โจsecondaryport number|nameโ sets the base port number that child processes use (the-bcommand-line flag).setproctitle yes|true|on|no|false|offโ decides whether the process title flexes master/group functionality, the port number it's listening on, and how many consoles it's managing. Heads up: your OS has to actually support thesetproctitle()call for this to work ๐ซถ.sslcredentials filenameโ sets where the SSL credentials file lives (the-ccommand-line flag).sslcacertificatefile filenameโ loads the valid CA certificates for the SSL connection out of that PEM encoded file. This one overrides the global CA list, no cap.sslreqclientcert yes|true|on|no|false|offโ sets whether the client needs a certificate to connect. Default isno'' `` ๐ธ.sslrequired yes|true|on|no|false|offโ sets whether encryption is required when talking to clients (the-Ecommand-line flag).unifiedlog filenameโ sets where the unified log goes. Peep the-Ucommand-line flag for the deets.
console name ๐
Defines a console identified as name. The keywords are the exact same as the default block, plus this one little addition:
aliases name[,...]|""โ defines a whole list of console aliases. If you use the null string (""), any aliases that were previously defined for that console get yeeted ๐ง.
default name ๐
Defines a block of defaults identified as name. And if name is *, you're defining the automatically applied default block โ which basically means every console has an implicit include "*"; chilling at the beginning of its definition. Iconic.
baud 300|600|1800|2400|4800|9600|19200|38400|57600|115200|..|4000000โ assigns the baud rate to the console. Only consoles of typedevice'' `` will actually use this value.break nโ assigns break sequence n as the default for the console, which is what the^Ecl0'' `` client escape sequence uses.breaklist n[,...]|""โ hooks up a list of break sequences referenced by n to the console. If you use*(the default), every defined break sequence is available. If you use the null string (""), none of them are.device filenameโ assigns the serial device filename as the path to the console. Only consoles of typedevice'' `` will use this value.devicesubst c=t[n]f[,...]|""โ does character substitutions on the device value. You can define a whole series of replacements by giving a comma-separated list ofc=t[n]fsequences, wherecis any printable character,tsays what the replacement value is,nis an optional field length, andfis the format string. Andtcan be one of the characters below โ they're sorted into string replacements or numeric replacements, which is what decides whether thenandffields even get used. Lowkey elegant ๐
String Replacement
cโ console namehโ host valuerโ replstring value
Numeric Replacement
bโ baud valuepโ config port valuePโ calculated port value
For string replacements, if the replacement isn't at least n characters, it gets padded with space characters on the left. And f must be s. For numeric replacements, the value gets formatted to at least n characters, padded with 0s if n begins with a 0, and space characters otherwise. f must be either d, x, X, a, or A, specifying a decimal, lowercase hexadecimal (0-9a-f), uppercase hexadecimal (0-9A-F), lowercase alphanumeric (0-9a-z), or uppercase alphanumeric (0-9A-Z) conversion. If you use the null string (""), no replacements happen at all.
exec command|""โ assigns the string command as the command used to access the console. Conserver runs it by invoking/bin/sh -ce "command"''. If you use the null string ("") or you just don't specify an `exec` keyword, conserver falls back to/bin/sh -i''. Only consoles of typeexec'' `` will use this value.execrunas [user][:group]|""โ by default, the command invoked byexecruns with the same privileges as the server. If the server is running with root privileges, this option resets the user and/or group of the invoked process to user and group respectively. user can be a username or a numeric uid, and group can be a group name or a numeric gid. Either one is optional. If the server is not running with root privileges, these values just get ignored. And if you specify the null string (""), you're back to the default of running with the same privileges as the server.execsubst c=t[n]f[,...]|""โ does character substitutions on the exec value. Go look at thedevicesubstoption for how that format string works. Null string ("") means no replacements, periodt.host hostnameโ assigns hostname as the host to connect to for accessing the console. You must also set theportoption for consoles of typehost''. Normally only consoles of typehost''andipmi'' `` use this value โ but if thedevicesubst,execsubst, orinitsubstkeywords are used in any console type, then this value gets used too.idlestring string|""โ assigns the string that gets sent to the console once the console has been idle for anidletimeoutamount of time. If you use the null string (""), the string is unset and the default takes over. The string gets interpreted exactly the way a break string is interpreted (check the break configuration items for that), where every delay specified via\d''uses the default delay time. Default string is\n''.idletimeout number[s|m|h]โ sets the idle timeout of the console to number seconds. If you toss ans,m, orhafter number, that time gets read as seconds, minutes, or hours. Set the timeout to zero to disable the idle timeout โ which is the default, bestie โจipmiciphersuite numberโ sets the IPMI cipher suite. Syntactically valid values are-1(the default) and greater. Check the FreeIPMI documentation for the usable values.ipmikg string|""โ sets the BMC authentication key K_g to string. A K_g value is a plain character string, with one exception: the backslash\:\\โ backslash\oooโ octal representation of a character (where ooo is one to three octal digits)\cโ character c
The resulting value has to be no more than 20 characters. The null string ("") is the default.
ipmiworkaround [!]option[,...]|""โ you can turn a workaround off by sticking a!'' `` character in front of it. So to turn off the integrity workaround, you'd write!integrity. Here are the valid options and how they map to FreeIPMI settings:activation-statusโSKIP_SOL_ACTIVATION_STATUSauth-capabilitesโAUTHENTICATION_CAPABILITIESchannel-payloadโSKIP_CHANNEL_PAYLOAD_SUPPORTchecksumโNO_CHECKSUM_CHECKdefaultโDEFAULTignore-payload-sizeโIGNORE_SOL_PAYLOAD_SIZEignore-portโIGNORE_SOL_PORTintegrityโNON_EMPTY_INTEGRITY_CHECK_VALUEintel-sessionโINTEL_2_0_SESSIONpacket-sequenceโINCREMENT_SOL_PACKET_SEQUENCEprivilegeโOPEN_SESSION_PRIVILEGEserial-alertsโSERIAL_ALERTS_DEFERREDsun-sessionโSUN_2_0_SESSIONsupermicro-sessionโSUPERMICRO_2_0_SESSION
If you don't specify any ipmiworkaround, the default'' workaround gets used. The null string ("") unsets **all** workarounds, including default'' . See the FreeIPMI documentation for the details on what each workaround actually affects ๐
ipmiprivlevel user|operator|adminโ sets the privilege level for the username used during IPMI authentication. Default privilege level isadmin'' ``.include defaultโ the default block defined using the name default gets applied to the current console or default block. Heads up: the included default block has to have been previously defined. No time travel allowed ๐initcmd command|""โ invokes command as soon as the console is brought up, redirecting the console to stdin, stdout, and stderr of command. The command gets passed as an argument to/bin/sh -ce''. If you use the null string (""``), the command is unset and nothing gets invoked.initrunas [user][:group]|""โ okay so by default, the command frominitcmdruns with the same privileges as the server. If the server is running with root privileges, this option resets the user and/or group of the invoked process to user and group respectively. user can be a username or numeric uid, and group can be a group name or numeric gid. Either one is optional. If the server is not running with root privileges, these values are not used. If the null string ("") is specified, the default of running with the same privileges as the server is restored. ๐initspinmax n|""โ set the max number of spins allowed for the console to n, where0 <= n <= 254. A console is "spinning" if an attempt to initialize it happens in underinitspintimerseconds from its previous initialization, and this quick init happensinitspinmaxtimes in a row. If at any point the time between initializations is greater thaninitspintimer, the counter for reachinginitspinmaxresets to zero. When a console is "spinning" it is forced down. If the null string ("") is specified, the default of5is used. ๐initspintimer t|""โ set the number of seconds a console must be "up" to not be considered "spinning" to t, where0 <= t <= 254. Seeinitspinmaxfor the full description of console "spinning." If the null string ("") is specified, the default of1is used. โฑ๏ธinitsubst c=t[n]f[,...]|""โ perform character substitutions on theinitcmdvalue. See thedevicesubstoption for an explanation of the format string. If the null string ("") is used, no replacements will be done. โจlogfile filename|""โ assign the logfile specified by filename to the console. Any occurrence of&in filename gets replaced with the name of the console. If the null string ("") is used, the logfile name is unset and no logging will occur. ๐logfilemax number[k|m]โ enable automatic rotation oflogfileonce its size exceeds number bytes. Specifyingkorminterprets number as kilobytes and megabytes. number must be at least2048bytes. A value of zero will turn off automatic rotation oflogfile. Thelogfilefilename will be renamedfilename-YYYYMMDD-HHMMSS, where the extension is the current GMT year, month, day, hour, minute, and second (to prevent issues with clock rollbacks). File sizes are checked every5minutes with an additional initial pseudo-random delay of up to one minute (to help prevent all processes checking all consoles simultaneously).2.5%(minimum100bytes, maximum4000bytes) of the old logfile is read from the end of the file. All data past the first newline is moved (not copied) to the new logfile so that a replay of the console works and starts on a line boundary. ๐master hostname|ipaddrโ define which conserver host manages the console. The host may be specified by hostname or using the address ipaddr. ๐motd message|""โ set the "message of the day" for the console to message, which gets displayed when a client attaches to the console. If the null string ("") is used, the MOTD is unset and no message will occur. ๐ฌoptions [!]option[,...]|""โ you can negate the option by prefixing it with a!character. So, to turn off thehupclflag, you would use!hupcl. The following are valid options:ixonโ enable XON/XOFF flow control on output. Only consoles of typedeviceorexecwill use this value. Default isixon. ๐ixanyโ enable any character to restart output. Only consoles of typedeviceorexecwill use this value. Default is!ixany. ๐ฆixoffโ enable XON/XOFF flow control on input. Only consoles of typedeviceorexecwill use this value. Default isixofffor consoles of typedeviceand!ixofffor consoles of typeexec. ๐๏ธcrtsctsโ enable RTS/CTS (hardware) flow control. Only consoles of typedevicewill use this value. Default is!crtscts. ๐cstopbโ set two stop bits, rather than one. Only consoles of typedevicewill use this value. Default is!cstopb. โ๏ธhupclโ lower modem control lines after last process closes the device (hang up). Only consoles of typedevicewill use this value. Default is!hupcl. ๐ดondemandโ initialize the console when a client requests a connection to the console. When no clients are connected, bring the console down. The conserver option-iwill set this flag for all consoles. Default is!ondemand. โกstriphighโ strip the high bit off all data coming from this console and all clients connected to this console before processing occurs. The conserver option-7will set this flag for all consoles. Default is!striphigh. โ๏ธreinitonccโ automatically reinitialize ("bring up") a downed console when a client connects. Without this option, a client will be attached to the downed console and will need to manually reinitialize the console with an escape sequence. The conserver option-owill set this flag for all consoles. Default is!reinitoncc. ๐autoreinitโ allow this console to be automatically reinitialized if it unexpectedly goes down. If the console doesn't come back up, it is retried every minute. A console of typeexecthat exits with a zero exit status is automatically reinitialized regardless of this setting. The conserver option-Fwill unset this flag for all consoles. Default isautoreinit. โป๏ธunlovedโ enable the sending of this console's output (prefixed with its name) to the daemon's stdout (or the logfile if in daemon mode) when no clients are connected to the console. The conserver option-uwill set this flag for all consoles. Default is!unloved. ๐loginโ allow users to log into this console. If logins are not allowed, conserver will send a generic message to the client saying so and terminate the connection. You can override the generic message by setting themotdmessage. Default islogin. ๐
parity even|mark|none|odd|spaceโ set the parity option for the console. Only consoles of typedevicewill use this value. โ๏ธpassword password|""โ use password during IPMI authentication. If the null string ("") is used (the default), no password will be used. ๐passwordfile filename|""โ read the IPMI password from filename. The first line of the file will be used as the password with trailing whitespace stripped. If bothpasswordandpasswordfileare specified,passwordfiletakes precedence. If the null string ("") is used (the default), no password file will be used. ๐port number|nameโ set the port used to access the console. The port may be specified as a number or a name. A name will cause agetservbyname(3)call to look up the port number. Theport,portbase, andportincvalues are all used to calculate the final port number to connect to. The formula used isfinalport = portbase + portinc * port. By using proper values in the formula, you can reference ports on a terminal server by their physical numbering of0..nor1..n(depending on if you like zero-based or one-based numbering). Warning: you can generate a-1value with this formula, which will become a very high numbered positive value (since things are stored unsigned). You must also set thehostoption as well. Normally, only consoles of typehostwill use this value, however if thedevicesubst,execsubst, orinitsubstkeywords are used in any console type, this value is used. ๐จportbase numberโ set the base value for the port calculation formula. number must be0or greater. The default is zero. Seeportfor the details of the formula. ๐งฎportinc numberโ set the increment value for the port calculation formula. number must be0or greater. The default is one. Seeportfor the details of the formula. โprotocol telnet|rawโ sets which protocol carries your data to and from the console. Pickrawand literally everything goes outas is'', zero protection, no protocol spec wrapping it up. Picktelnet(and that's the default, bestie) and your data gets encapsulated in the telnet protocol. Heads up though: thestriphighconsole option still applies when the server reads data, and if it's enabled it can mess with the encapsulation process. ๐replstring stringโ a generic replacement string that thedevicesubst,execsubst, andinitsubstkeywords can all use. One string, three vibes.ro [!]username[,...]|""โ defines the list of users who make up the console's read-only access list. Here's how the matching works, stay with me:- If username matches a previously defined group name, all members of that previous group get applied to the read-only access list (with access reversed if it's prefixed with a
!). - If username doesn't match a previously defined group and begins with
@, then the name (minus the@) gets checked against the host's group database, and all users found in that group are granted read-only access โ or denied, if prefixed with!. - If username doesn't match a previous group and doesn't begin with
@, those users just get granted read-only access โ or denied, if prefixed with!. - And if you use the null string (``""''), every user previously defined for the console's read-only list gets removed. Poof. Gone.
- If username matches a previously defined group name, all members of that previous group get applied to the read-only access list (with access reversed if it's prefixed with a
rw [!]username[,...]|""โ same whole deal asroabove, except it's the console's read-write access list. So:- username matching a previously defined group name โ all members of that previous group get applied to the read-write access list (access reversed if prefixed with
!). - Not a match for a previous group and starts with
@โ the name minus the@gets checked against the host's group database, and all users found in the group are granted read-write access (denied if prefixed with!). - Not a match for a previous group and doesn't start with
@โ those users are granted read-write access (denied if prefixed with!). - Null string (``""'') โ any users previously defined for the console's read-write list are removed. โจ
- username matching a previously defined group name โ all members of that previous group get applied to the read-write access list (access reversed if prefixed with
tasklist c[,...]|""โ associates a list of tasks (referenced byc) with the console. Use*and that's the default, meaning every defined task is available. Use the null string (``""'') and no tasks will be available.timestamp [number[m|h|d|l]][a][b]|""โ controls the time between timestamps slapped onto the console log file, and whether read/write connection actions get logged too. The timestamps come out looking like this:
[-- MARK -- Mon Jan 25 14:46:56 1999]
The m, h, and d tags mean minutes''</purple> (that's the default), <purple>hours'', and days''</purple>. The `l` tag means <purple>lines'', and it makes timestamps shaped like this get placed every number lines (a newline character is what signifies a new line):
[Mon Jan 25 14:46:56 PST 1999]
So 5h = every five hours, and 2l = every two lines. Fancy. Now for the letters: an a can be specified to add logs of attached''</mint>, <mint>detached'', and ``bumped'' actions, including the user's name and the host the client connection came from. A b can be specified to add logging of break sequences sent to the console. ๐ซถ
type device|ipmi|exec|host|noop|udsโ sets the type of console. Which one do you want, bestie? Here's the whole menu:deviceโ for local serial ports (and you also set thedevicevalue).ipmiโ for IPMI serial over LAN consoles (also set thehostvalue, and possiblyusername,password, and theipmi*values).execโ for command invocations (maybe also set theexecvalue).hostโ for terminal servers and other TCP socket-based interaction (also set thehostandportvalues).noopโ a placeholder. It does nothing, ignores anylogfilevalue, and forces the!nologinoption (so you might wanna set themotdvalue instead).udsโ for Unix domain sockets (also set theudsoption).
uds filenameโ assigns the Unix domain socket filename as the path to the console. Only consoles of typeudswill actually use this value.udssubst c=t[n]f[,...]|""โ performs character substitutions on theudsvalue. Go read thedevicesubstoption for the explanation of that format string. Use the null string (``""'') and no replacements will be done.username username|""โ uses username during IPMI authentication. If you use the null string (""''</pink>) โ which is the default โ then the <purple>null'' user gets used. ๐
๐ group name
Defines a user group identified as name. Iconic little container for people.
users [!]username[,...]|""โ defines the list of users making up the group name. The matching rules are the same energy asro/rw:- If username matches a previously defined group name, all members of that previous group get applied to the current group (access reversed if prefixed with a
!). - If it doesn't match a previously defined group and username begins with
@, the name (minus the@) gets checked against the host's group database, and all users found in that group are recorded with access โ or without, if prefixed with!. - If it doesn't match a previous group and doesn't begin with
@, the users are recorded with access โ or without, if prefixed with!. - Null string (``""'') โ any users previously defined for this group are removed.
- If username matches a previously defined group name, all members of that previous group get applied to the current group (access reversed if prefixed with a
๐ task c
Defines a task, where c is a lowercase alphanumeric character (that's 0-9a-z). Tasks get invoked through the ``^Ec!c'' client escape sequence. Periodt.
cmd command|""โ invokes command on the server when the client tells it to. Every file descriptor is closed, except forstderr(which is inherited from the server). The command gets passed as an argument to/bin/sh -ce''</cyan>, and it's a <purple>fire and forget'' methodology โ meaning you need to check the logs for any issues, because it will not come back and tell you. If you use the null string (``""''), the entire task definition is ignored.confirm yes|true|on|no|false|offโ sets whether or not to ask the client for confirmation before invoking the task. Default is ``no''.description stringโ sets a description for the task. When a client lists tasks, string gets printed instead of the command defined above. If you use the null string (``""''), the command defined above gets printed instead.runas [user][:group]|""โ by default, the command invoked bycmdruns with the same privileges as the server. If the server is running with root privileges, this option resets the user and/or group of the invoked process to user and group respectively. user can be a username or a numeric uid, and group can be a group name or a numeric gid. Either one is optional. If the server is not running with root privileges, these values are just not used. If the null string (``""'') is specified, the default of running with the same privileges as the server gets restored. ๐subst c=t[n]f[,...]|""โ performs character substitutions on thecmdvalue. Again, see thedevicesubstoption for the explanation of that format string. Null string (``""'') โ no replacements will be done.
๐ AUTHORS
Bryan Stansell, conserver.com
๐ SEE ALSO
console(1), conserver.passwd(5), conserver(8)
okay bestie that's literally the whole page, you ate it ๐โจ this was CONSERVER.CF(5) from conserver-8.3.0, dated 2026/02/02 โ go forth and configure your consoles with main character energy ๐๐ฆ
๐ฆ where this page comes from
- epel 10: conserver 8.3.0-1.el10_3 ยท BSD-3-Clause AND Zlib
- fedora 44: conserver 8.3.0-1.fc44 ยท BSD-3-Clause AND Zlib
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms