Hello community, here is the log from the commit of package clusterssh for openSUSE:Factory checked in at 2019-08-24 18:48:28 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/clusterssh (Old) and /work/SRC/openSUSE:Factory/.clusterssh.new.7948 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "clusterssh" Sat Aug 24 18:48:28 2019 rev:11 rq:725705 version:4.14 Changes: -------- --- /work/SRC/openSUSE:Factory/clusterssh/clusterssh.changes 2019-03-26 15:43:38.296202202 +0100 +++ /work/SRC/openSUSE:Factory/.clusterssh.new.7948/clusterssh.changes 2019-08-24 18:48:52.509742998 +0200 @@ -1,0 +2,10 @@ +Thu Aug 22 18:34:32 UTC 2019 - Michael Ströder <mich...@stroeder.com> + +- Update to new upstream release v4.14 + * Include README within the repository, not just created tar.gz files + * Add 'autoquit' setting to 'File' menu (Github issue #114) + * Correct macro_hostname to be the FQDN of the server where + cssh is being run (Github issue #116) + * Add in user defined macros + +------------------------------------------------------------------- Old: ---- v4.13.2_02.tar.gz New: ---- v4.14.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ clusterssh.spec ++++++ --- /var/tmp/diff_new_pack.iCLiPn/_old 2019-08-24 18:48:54.441742812 +0200 +++ /var/tmp/diff_new_pack.iCLiPn/_new 2019-08-24 18:48:54.441742812 +0200 @@ -17,8 +17,8 @@ Name: clusterssh -%define dullver 4.13.2_02 -Version: 4.13.2.02 +%define dullver 4.14 +Version: 4.14 Release: 0 Summary: Multiplex SSH sessions onto many hosts using multiple terminals License: GPL-1.0-or-later OR Artistic-1.0 ++++++ v4.13.2_02.tar.gz -> v4.14.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clusterssh-4.13.2_02/.gitignore new/clusterssh-4.14/.gitignore --- old/clusterssh-4.13.2_02/.gitignore 2019-01-14 21:06:43.000000000 +0100 +++ new/clusterssh-4.14/.gitignore 2019-08-21 22:15:44.000000000 +0200 @@ -13,6 +13,5 @@ /MYMETA.json /MYMETA.yml /pm_to_blib -/README *.swp *.tar.gz diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clusterssh-4.13.2_02/Changes new/clusterssh-4.14/Changes --- old/clusterssh-4.13.2_02/Changes 2019-01-14 21:06:43.000000000 +0100 +++ new/clusterssh-4.14/Changes 2019-08-21 22:15:44.000000000 +0200 @@ -1,5 +1,11 @@ Revision history for {{$dist->name}} +4.14 2019-08-21 Duncan Ferguson <duncan_fergu...@user.sf.net> +- Include README within the repository, not just created tar.gz files +- Add 'autoquit' setting to 'File' menu (Github issue #114) +- Correct macro_hostname to be the FQDN of the server where cssh is being run (Github issue #116) +- Add in user defined macros + 4.13.2_02 2019-01-14 Duncan Ferguson <duncan_fergu...@user.sf.net> - Fix Getopt-Long minimum version - Fix excess test output when Sort::Naturally isn't installed diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clusterssh-4.13.2_02/README new/clusterssh-4.14/README --- old/clusterssh-4.13.2_02/README 1970-01-01 01:00:00.000000000 +0100 +++ new/clusterssh-4.14/README 2019-08-21 22:15:44.000000000 +0200 @@ -0,0 +1,745 @@ +NAME + cssh - Cluster administration tool + +VERSION + This documentation is for version: 4.14 + +SYNOPSIS + cssh [-a '<command>'] [-K <seconds>] [-q] [-c '<filename>'] [-x <cols>] + [-C '<filename>'] [--debug [[...] || <INTEGER>]] [-d] [-e + '<[user@]<host>[:port]>'] [--fillscreen] [-f '<font>'] [-h] [-L '[tag]'] + [-H] [-o '<STRING>'] [-p <port>] [-Q] [-y <rows>] [-s] [-r '<filename>'] + [-t '<STRING>'] [-g] [-T '<title>'] [-u] [-?] [-A] [-l '<username>'] + [-v] + +DESCRIPTION + The command opens an administration console and an xterm to all + specified hosts. Any text typed into the administration console is + replicated to all windows. All windows may also be typed into directly. + + This tool is intended for (but not limited to) cluster administration + where the same configuration or commands must be run on each node within + the cluster. Performing these commands all at once via this tool ensures + all nodes are kept in sync. + + Connections are opened using ssh which must be correctly installed and + configured. + + Extra caution should be taken when editing files as lines may not + necessarily be in the same order; assuming line 5 is the same across all + servers and modifying that is dangerous. It's better to search for the + specific line to be changed and double-check all terminals are as + expected before changes are committed. + + Further Notes + Please also see "KNOWN BUGS". + + * The dotted line on any sub-menu is a tear-off, i.e. click on it and + the sub-menu is turned into its own window. + + * Unchecking a hostname on the Hosts sub-menu will unplug the host + from the cluster control window, so any text typed into the console + is not sent to that host. Re-selecting it will plug it back in. + + * If your window manager menu bars are obscured by terminal windows + see the "screen_reserve_XXXXX" options in the + $HOME/.clusterssh/config file (see "FILES"). + + * If the terminals overlap too much see the "terminal_reserve_XXXXX" + options in the $HOME/.clusterssh/config file (see "FILES"). + + * When using ClusterSSH on a large number of systems to connect to a + single system using an SSH utility (e.g. you issue a command to to + copy a file using scp from the remote computers to a single host) + and when these connections require authentication (i.e. you are + going to authenticate with a password), the sshd daemon at that + location may refuse connections after the number "MaxStartups" limit + in sshd_config is exceeded. (If this value is not set, it defaults + to 10). This is expected behavior; sshd uses this mechanism to + prevent DoS attacks from unauthenticated sources. Please tune + sshd_config and reload the SSH daemon, or consider using the + ~/.ssh/authorized_keys mechanism for authentication if you encounter + this problem. + + * If client windows fail to open, try running: + + "cssh -e {single host name}" + + This will test the mechanisms used to open windows to hosts. This + could be due to either the "-xrm" terminal option which enables + "AllowSendEvents" (some terminals do not require this option, other + terminals have another method for enabling it - see your terminal + documentation) or the configuration of "ssh". + +OPTIONS + Some of these options may also be defined within the configuration file. + Default options are shown as appropriate. + + --action '<command>', -a '<command>' + Run the command in each session, e.g. "-a 'vi /etc/hosts'" to drop + straight into a vi session. + + --autoclose <seconds>, -K <seconds> + Number of seconds to wait before closing finished terminal windows. + + --autoquit, -q + Toggle automatically quitting after the last client window has + closed (overriding the config file). + + --cluster-file '<filename>', -c '<filename>' + Use supplied file as additional cluster file (see also "FILES"). + + --cols <cols>, -x <cols> + Number of columns + + --config-file '<filename>', -C '<filename>' + Use supplied file as additional configuration file (see also + "FILES"). + + --debug [[...] || <INTEGER>] + Enable debugging. Either a level can be provided or the option can + be repeated multiple times. Maximum level is 9. + + --dump-config, -d + Dump the current configuration in the same format used by the + $HOME/.clusterssh/config file. + + --evaluate '<[user@]<host>[:port]>', -e '<[user@]<host>[:port]>' + Display and evaluate the terminal and connection arguments to + display any potential errors. The <hostname> is required to aid the + evaluation. + + --fillscreen + Resize terminal windows to fill the whole available screen + + --font '<font>', -f '<font>' + Specify the font to use in the terminal windows. Use standard X font + notation such as "5x8". + + --help, -h + Show basic help text and exit + + --list '[tag]', -L '[tag]' + List available cluster tags. Tag is optional. If a tag is provided + then hosts for that tag are listed. NOTE: format of output changes + when using "--quiet" or "-Q" option. + + --man, -H + Show full help text (the man page) and exit + + --options '<STRING>', -o '<STRING>' + Specify arguments to be passed to ssh when making the connection. + NOTE: options for ssh should normally be put into the ssh + configuration file; see "ssh_config" and $HOME/.ssh/config for more + details. + + Default: -x -o ConnectTimeout=10 + + --port <port>, -p <port> + Specify an alternate port for connections. + + --quiet, -Q + Do not output extra text when using some options + + --rows <rows>, -y <rows> + Number of rows + + --show-history, -s + Show history within console window. + + --tag-file '<filename>', -r '<filename>' + Use supplied file as additional tag file (see also "FILES") + + --term-args '<STRING>', -t '<STRING>' + Specify arguments to be passed to terminals being used. + + --tile, -g + Toggle window tiling (overriding the config file). + + --title '<title>', -T '<title>' + Specify the initial part of the title used in the console and client + windows. + + --unique-servers, -u + Toggle connecting to each host only once when a hostname has been + specified multiple times. + + --usage, -? + Show synopsis and exit + + --use-all-a-records, -A + If a hostname resolves to multiple IP addresses, toggle whether or + not to connect to all of them, or just the first one (see also + config file entry). + + --username '<username>', -l '<username>' + Specify the default username to use for connections (if different + from the currently logged in user). NOTE: will be overridden by + <user>@<host>. + + --version, -v + Show version information and exit + +ARGUMENTS + The following arguments are supported: + + [user@]<hostname>[:port] ... + Open an xterm to the given hostname and connect to the + administration console. The optional port number can be used if the + server is not listening on the standard port. + + <tag> ... + Open a series of xterms defined by <tag> in one of the supplementary + configuration files (see "FILES"). + + Note: specifying a username on a cluster tag will override any + usernames defined in the cluster. + +KEY SHORTCUTS + The following key shortcuts are available within the console window, and + all of them may be changed via the configuration files. + + Control-Shift-plus + Open the 'Add Host(s) or Cluster(s)' dialogue box. Multiple host or + cluster names can be entered, separated by spaces. + + Alt-n + Paste in the hostname part of the specific connection string to each + client, minus any username or port, e.g. + + "scp /etc/hosts server:files/<Alt-n>.hosts" + + would replace the <Alt-n> with the client's name in each window. + + Alt-l + Paste in the hostname of the server cssh is being run on + + Alt-q + Quit the program and close all connections and windows. + + Alt-r + Retile all the client windows. + + Alt-u + Paste in the username for the connection + + Alt-1 + Alt-2 + Alt-3 + Alt-4 + Run the matching user defined macro on the server and send the + output to the client + +EXAMPLES + Open up a session to 3 servers + $ cssh server1 server2 server3 + + Open up a session to a cluster of servers identified by the tag 'farm1' + and give the controlling window a specific title, where the tag is + defined in one of the default configuration files + $ cssh -T 'Web Farm Cluster 1' farm1 + + Connect to different servers using different login names. NOTE: this can + also be achieved by setting up appropriate options in the configuration + files. Do not close the console when the last terminal exits. + $ cssh user1@server1 admin@server2 + + Open up a cluster defined in a non-default configuration file + $ cssh -c $HOME/cssh.extra_clusters db_cluster + + Override the configured/default port to use 2022 instead + $ cssh -p 2022 server1 server2 + +FILES + /etc/clusters, $HOME/.clusterssh/clusters + These files contain a list of tags to server names mappings. When + any name is used on the command line it is checked to see if it is a + tag. If it is a tag, then the tag is replaced with the list of + servers. The format is as follows: + + <tag> [user@]<server>[:port] [user@]<server>[:port] [...] + + e.g. + + # List of servers in live + live admin1@server1 admin2@server2:2022 server3 server4 + + All comments (marked by a #) and blank lines are ignored. Tags may + be nested, but be aware of using recursive tags as they are not + checked for. + + Servers can be defined using expansion macros: + + "webservers websvr{a,b,c}" + + would be expanded to + + "webservers websvra websvrb websvrc" + + and + + "webservers websvr{6..9}" + + would be expanded to + + "webservers websvr6 websvr7 websvr8 websvr9" + + Extra cluster files may also be specified either as an option on the + command line (see "cluster-file") or in the user's + $HOME/.clusterssh/config file (see "extra_cluster_file" + configuration option). + + NOTE: the last tag read overwrites any pre-existing tag of that + name. + + NOTE: there is a special cluster tag called "default" - any tags or + hosts included within this tag will be automatically opened if + nothing is specified on the command line. + + /etc/tags, $HOME/.clusterssh/tags + Very similar to clusters files but the definition is reversed. The + format is: + + <host> <tag> [...] + + This allows one host to be specified as a member of a number of + tags. This format can be clearer than using clusters files. + + Extra tag files may be specified either as an option (see + "tag-file") or within the user's $HOME/.clusterssh/config file (see + "extra_tag_file" configuration option). + + NOTE: All tags are added together + + /etc/csshrc & $HOME/.clusterssh/config + This file contains configuration overrides - the defaults are as + marked. Default options are overwritten first by the global file, + and then by the user file. + + NOTE: values for entries do not need to be quoted unless it is + required for passing arguments, e.g. + + "terminal_allow_send_events="-xrm '*.VT100.allowSendEvents:true'"" + + should be written as + + "terminal_allow_send_events=-xrm '*.VT100.allowSendEvents:true'" + + auto_close = 5 + Close terminal window after this many seconds. If set to 0 will + instead wait on input from the user in each window before + closing. See also --autoclose and --no-autoclose + + auto_quit = 1 + Automatically quit after the last client window closes. Set to 0 + to disable. See also --autoquit + + auto_wm_decoration_offsets = no + Enable or disable alternative algorithm for calculating terminal + positioning. + + comms = ssh + Sets the default communication method (initially taken from the + name of the program, but can be overridden here). + + console_position = <null> + Set the initial position of the console - if empty then let the + window manager decide. Format is '+<x>+<y>', i.e. '+0+0' is top + left hand corner of the screen, '+0-70' is bottom left hand side + of screen (more or less). + + external_command_mode = 0600 + File mode bits for the external_command_pipe. + + external_command_pipe = <null> + Define the full path to an external command pipe that can be + written to for controlling some aspects of ClusterSSH, such as + opening sessions to more clusters. + + Commands: + + "open <tag|hostname>" - open new sessions to provided tag or + hostname + + "retile" - force window retiling + + e.g.: "echo 'open localhost'" /path/to/external_command_pipe >> + + external_cluster_command = <null> + Define the full path to an external command that can be used to + resolve tags to host names. This command can be written in any + language. The script must accept a list of tags to resolve and + output a list of hosts (space separated on a single line). Any + tags that cannot be resolved should be returned unchanged. + + A non-0 exit code will be counted as an error, a warning will be + printed and output ignored. + + If the external command is given a "-L" option it should output + a list of tags (space separated on a single line) it can resolve + + extra_cluster_file = <null> + Define an extra cluster file in the format of /etc/clusters. + Multiple files can be specified, separated by commas. Both ~ and + $HOME are acceptable as a reference to the user's home + directory, e.g. + + "extra_cluster_file = ~/clusters, $HOME/clus" + + extra_tag_file = <null> + Define an extra tag file in the format of /etc/tags. Multiple + files can be specified, separated by commas. Both ~ and $HOME + are acceptable as a reference to the user's home directory, e.g. + + "extra_tag_file = ~/tags, $HOME/tags" + + key_addhost = Control-Shift-plus + Default key sequence to open AddHost menu. See "KEY SHORTCUTS" + for more information. + + hide_menu = 0 + If set to 1, hide the menu bar (File, Hosts, Send, Help) in the + console. + + key_clientname = Alt-n + Default key sequence to send cssh client names to client. See + "KEY SHORTCUTS" for more information. + + key_localname = Alt-l + Default key sequence to send hostname of local server to client. + See "KEY SHORTCUTS" for more information. + + key_paste = Control-v + Default key sequence to paste text into the console window. See + "KEY SHORTCUTS" for more information. + + key_quit = Control-q + Default key sequence to quit the program (will terminate all + open windows). See "KEY SHORTCUTS" for more information. + + key_retilehosts = Alt-r + Default key sequence to retile host windows. See "KEY SHORTCUTS" + for more information. + + key_username = Alt-u + Default key sequence to send username to client. See "KEY + SHORTCUTS" for more information. + + key_user_1 = Alt-1 + key_user_2 = Alt-2 + key_user_3 = Alt-3 + key_user_4 = Alt-4 + Default key sequence to send user defined macros to client. If + the matching macro_user_1 macro is undefined, the sequence is + passed straight to the terminal. See "KEY SHORTCUTS" for more + information. + + macro_servername = %s + macro_hostname = %h + macro_username = %u + macro_newline = %n + macro_version = %v + macro_user_1 = %1 + macro_user_2 = %2 + macro_user_3 = %3 + macro_user_4 = %4 + Change the replacement macro used when either using a 'Send' + menu item, or when pasting text into the main console. + + macro_user_1_command = + macro_user_2_command = + macro_user_3_command = + macro_user_4_command = + User defined macros - the macro is run through the shell on the + server and the output is sent to the client. For example, + + "macro_user_1_command=echo echo macro_user_1" + + would send the text C<echo macro_user_1> into the terminal session. + + "macro_user_1_command=env | grep CSSH" + + would send the CSSH environment variables to the client. + + The following environment variables are set in the shell of the + macro process + + "CSSH_SERVERNAME" + "CSSH_HOSTNAME" + "CSSH_USERNAME" + "CSSH_CONNECTION_STRING" + "CSSH_CONNECTION_PORT" + "CSSH_VERSION" + + macros_enabled = yes + Enable or disable macro replacement. Note: this affects all the + "macro_*" variables above. + + max_addhost_menu_cluster_items = 6 + Maximum number of entries in the 'Add Host' menu cluster list + before scrollbars are used + + max_host_menu_items = 30 + Maximum number of hosts to put into the host menu before + starting a new column + + menu_host_autotearoff = 0 + menu_send_autotearoff = 0 + When set to non-0 will automatically tear-off the host or send + menu at program start + + mouse_paste = Button-2 (middle mouse button) + Default key sequence to paste text into the console window using + the mouse. See "KEY SHORTCUTS" for more information. + + rsh = /path/to/rsh + ssh = /path/to/ssh + telnet = /path/to/telnet + Set the path to the specific binary to use for the communication + method, else uses the first match found in $PATH + + rsh_args = <blank> + ssh_args = "-x -o ConnectTimeout=10" + telnet_args = <blank> + Sets any arguments to be used with the communication method + (defaults to ssh arguments). + + NOTE: The given defaults are based on OpenSSH, not commercial + ssh software. + + NOTE: Any "generic" change to the method (e.g., specifying the + ssh port to use) should be done in the medium's own config file + (see "ssh_config" and $HOME/.ssh/config). + + screen_reserve_top = 0 + screen_reserve_bottom = 60 + screen_reserve_left = 0 + screen_reserve_right = 0 + Number of pixels from the screen's side to reserve when + calculating screen geometry for tiling. Setting this to + something like 50 will help keep cssh from positioning windows + over your window manager's menu bar if it draws one at that side + of the screen. + + terminal = /path/to/xterm + Path to the X-Windows terminal used for the client. + + terminal_args = <blank> + Arguments to use when opening terminal windows. Otherwise takes + defaults from $HOME/.Xdefaults or $HOME/.Xresources file. + + terminal_chdir = 0 + When non-0, set the working directory for each terminal as per + 'terminal_chdir_path' + + terminal_chdir_path = $HOME/.clusterssh/work/%s + Path to use as working directory for each terminal when + 'terminal_chdir' is enabled. The path provided is passed through + the macro parser (see the section above on 'macros_enabled'. + + terminal_font = 6x13 + Font to use in the terminal windows. Use standard X font + notation. + + terminal_reserve_top = 5 + terminal_reserve_bottom = 0 + terminal_reserve_left = 5 + terminal_reserve_right = 0 + Number of pixels from the terminal's side to reserve when + calculating screen geometry for tiling. Setting these will help + keep cssh from positioning windows over your scroll and title + bars or otherwise overlapping the windows too much. + + terminal_colorize = 1 + If set to 1 (the default), then "-bg" and "-fg" arguments will + be added to the terminal invocation command-line. The terminal + will be colored in a pseudo-random way based on the host name; + while the color of a terminal is not easily predicted, it will + always be the same color for a given host name. After a while, + you will recognize hosts by their characteristic terminal color. + + terminal_bg_style = dark + If set to "dark", the terminal background will be set to black + and the foreground to the pseudo-random color. If set to + "light", then the foreground will be black and the background + the pseudo-random color. If terminal_colorize is "zero", then + this option has no effect. + + terminal_size = 80x24 + Initial size of terminals to use. NOTE: the number of lines (24) + will be decreased when resizing terminals for tiling, not the + number of characters (80). + + terminal_title_opt = -T + Option used with "terminal" to set the title of the window + + terminal_allow_send_events = -xrm '*.VT100.allowSendEvents:true' + Option required by the terminal to allow XSendEvents to be + received + + title = cssh + Title of windows to use for both the console and terminals. + + unmap_on_redraw = no + Tell Tk to use the UnmapWindow request before redrawing terminal + windows. This defaults to "no" as it causes some problems with + the FVWM window manager. If you are experiencing problems with + redraws, you can set it to "yes" to allow the window to be + unmapped before it is repositioned. + + use_all_a_records = 0 + If a hostname resolves to multiple IP addresses, set to 1 to + connect to all of them, not just the first one found. See also + "--use-all-a-records"} + + use_hotkeys = 1 + Setting to 0 will disable all hotkeys. + + use_natural_sort = 0 + Windows will normally sort in alphabetical order, i.e.: host1, + host11, host2. Setting to this 1 will change the sort order, + i.e.: host1, host2, host11. NOTE: You must have the perl module + Sort::Naturally installed. + + user = $LOGNAME + Sets the default user for running commands on clients. + + window_tiling = 1 + Perform window tiling (set to 0 to disable) + + window_tiling_direction = right + Direction to tile windows, where "right" means starting top left + and moving right and then down, and anything else means starting + bottom right and moving left and then up + + NOTE: The key shortcut modifiers must be in the form "Control", + "Alt" or "Shift", e.g. with the first letter capitalised and the + rest lower case. Keys may also be disabled individually by setting + to the word "null". + + $HOME/.clusterssh/send_menu + This (optional) file contains items to populate the send menu. The + default entry could be written as: + + <send_menu> + <menu title="Use Macros"> + <toggle/> + <accelerator>ALT-p</accelerator> + </menu> + <menu title="Remote Hostname"> + <command>%s</command> + <accelerator>ALT-n</accelerator> + </menu> + <menu title="Local Hostname"> + <command>%s</command> + <accelerator>ALT-l</accelerator> + </menu> + <menu title="Username"> + <command>%u</command> + <accelerator>ALT-u</accelerator> + </menu> + <menu title="Test Text"> + <command>echo "ClusterSSH Version: %v%n</command> + </menu> + </send_menu> + + Submenus can also be specified as follows: + + <send_menu> + <menu title="Default Entries"> + <detach>yes</detach> + <menu title="Hostname"> + <command>%s</command> + <accelerator>ALT-n</accelerator> + </menu> + </menu> + </send_menu> + + Caveats: + + There is currently no strict format checking of this file. + The format of the file may change in the future + If the file exists, the default entry (Hostname) is not added + + The following replacement macros are available (note: these can be + changed in the configuration file): + + %s Hostname part of the specific connection string to each client, + minus any username or port + + %u Username part of the connection string to each client + + %h Hostname of server where cssh is being run from + + %n "RETURN" code + + NOTE: requires XML::Simple to be installed + +KNOWN BUGS + If you have any ideas about how to fix the below bugs, please get in + touch and/or provide a patch. + + * Swapping virtual desktops can cause a redraw of all the terminal + windows. This is due to a lack of distinction within Tk between + switching desktops and minimising/maximising windows. Until Tk can + tell the difference between the two events, there is no fix (apart + from rewriting everything directly in X). + +TROUBLESHOOTING + If you have issues running cssh, first try: + + "cssh -e [user@]<hostname>[:port]" + + This performs two tests to confirm cssh is able to work properly with + the settings provided within the $HOME/.clusterssh/config file (or + internal defaults). + + 1 Test the terminal window works with the options provided + + 2 Test ssh works to a host with the configured arguments + + Configuration options to watch for in ssh are: + + * SSH doesn't understand "-o ConnectTimeout=10" - remove the option + from the $HOME/.clusterssh/config file + + * OpenSSH-3.8 using untrusted ssh tunnels - use "-Y" instead of "-X" + or use "ForwardX11Trusted yes" in $HOME/.ssh/ssh_config (if you + change the default ssh options from "-x" to "-X") + +SUPPORT AND REPORTING BUGS + A web site for comments, requests, bug reports and bug fixes/patches is + available at: <https://github.com/duncs/clusterssh> + + If you require support, please run the following commands and create an + issue via: <https://github.com/duncs/clusterssh/issues> + + "perl -V" + + "perl -MTk -e 'print $Tk::VERSION,$/'" + + "perl -MX11::Protocol -e 'print $X11::Protocol::VERSION,$/'" + + "cat /etc/csshrc $HOME/.clusterssh/config" + + Using the debug option (--debug) will turn on debugging output. Repeat + the option to increase the amount of debug. However, if possible please + only use this option with one host at a time, e.g. "cssh --debug <host>" + due to the amount of output produced (in both main and child windows). + +SEE ALSO + <https://github.com/duncs/clusterssh/wiki/>, "ssh", Tk::overview, + X11::Protocol, "perl" + +AUTHOR + Duncan Ferguson, "<duncan_j_ferguson at yahoo.co.uk>" + +LICENSE AND COPYRIGHT + Copyright 1999-2018 Duncan Ferguson. + + This program is free software; you can redistribute it and/or modify it + under the terms of either: the GNU General Public License as published + by the Free Software Foundation; or the Artistic License. + + See http://dev.perl.org/licenses/ for more information. + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clusterssh-4.13.2_02/lib/App/ClusterSSH/Config.pm new/clusterssh-4.14/lib/App/ClusterSSH/Config.pm --- old/clusterssh-4.13.2_02/lib/App/ClusterSSH/Config.pm 2019-01-14 21:06:43.000000000 +0100 +++ new/clusterssh-4.14/lib/App/ClusterSSH/Config.pm 2019-08-21 22:15:44.000000000 +0200 @@ -49,6 +49,10 @@ key_macros_enable => "Alt-p", key_paste => "Control-v", key_username => "Alt-u", + key_user_1 => "Alt-1", + key_user_2 => "Alt-2", + key_user_3 => "Alt-3", + key_user_4 => "Alt-4", mouse_paste => "Button-2", auto_quit => "yes", auto_close => 5, @@ -103,6 +107,15 @@ macro_username => '%u', macro_newline => '%n', macro_version => '%v', + macro_user_1 => '%1', + macro_user_2 => '%2', + macro_user_3 => '%3', + macro_user_4 => '%4', + + macro_user_1_command => '', + macro_user_2_command => '', + macro_user_3_command => '', + macro_user_4_command => '', max_addhost_menu_cluster_items => 6, menu_send_autotearoff => 0, @@ -279,6 +292,15 @@ if ( $read_config{terminal_font} ); $self->validate_args(%read_config); + + # Look at the user macros and if not set remove the hotkey for them + for my $i (qw/ 1 2 3 4 /) { + if ( ! $self->{"macro_user_${i}_command"} ) { + delete $self->{"key_user_${i}"}; + } + } + + return $self; } sub load_configs { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clusterssh-4.13.2_02/lib/App/ClusterSSH/Getopt.pm new/clusterssh-4.14/lib/App/ClusterSSH/Getopt.pm --- old/clusterssh-4.13.2_02/lib/App/ClusterSSH/Getopt.pm 2019-01-14 21:06:43.000000000 +0100 +++ new/clusterssh-4.14/lib/App/ClusterSSH/Getopt.pm 2019-08-21 22:15:44.000000000 +0200 @@ -152,7 +152,7 @@ $self->add_option( spec => 'autoquit|q', help => $self->loc( - 'Toggle automatically quiting after the last client window has closed (overriding the config file).' + 'Toggle automatically quitting after the last client window has closed (overriding the config file).' ), ); $self->add_option( @@ -559,6 +559,12 @@ output $self->loc(q{Retile all the client windows.}); output '=item ', $self->parent->config->{key_username}; output $self->loc(q{Paste in the username for the connection}); + output '=item ', $self->parent->config->{key_user_1} || 'Alt-1'; + output '=item ', $self->parent->config->{key_user_2} || 'Alt-2'; + output '=item ', $self->parent->config->{key_user_3} || 'Alt-3'; + output '=item ', $self->parent->config->{key_user_4} || 'Alt-4'; + output $self->loc(q{Run the matching user defined macro on the server and send the output to the client}); + output '=back'; output '=head1 ' . $self->loc('EXAMPLES'); @@ -694,7 +700,7 @@ C<< open <tag|hostname> >> - open new sessions to provided tag or hostname C<< retile >> - force window retiling - + e.g.: C<< echo 'open localhost' >> /path/to/external_command_pipe >>} ); @@ -768,15 +774,61 @@ 'L<KEY SHORTCUTS>' ); + output '=item key_user_1 = Alt-1'; + output '=item key_user_2 = Alt-2'; + output '=item key_user_3 = Alt-3'; + output '=item key_user_4 = Alt-4'; + output $self->loc( + q{Default key sequence to send user defined macros to client. If the matching [_2] macro is undefined, the sequence is passed straight to the terminal. See [_1] for more information.}, + 'L<KEY SHORTCUTS>', 'L<macro_user_1>' + ); + output '=item macro_servername = %s'; output '=item macro_hostname = %h'; output '=item macro_username = %u'; output '=item macro_newline = %n'; output '=item macro_version = %v'; + output '=item macro_user_1 = %1'; + output '=item macro_user_2 = %2'; + output '=item macro_user_3 = %3'; + output '=item macro_user_4 = %4'; output $self->loc( q{Change the replacement macro used when either using a 'Send' menu item, or when pasting text into the main console.} ); + output '=item macro_user_1_command ='; + output '=item macro_user_2_command ='; + output '=item macro_user_3_command ='; + output '=item macro_user_4_command ='; + + output $self->loc( + q{User defined macros - the macro is run through the shell on the server and the output is sent to the client. For example,}, + ); + + output "C<macro_user_1_command=echo echo macro_user_1>"; + output $self->loc( + q{ + would send the text [_1] into the terminal session. + }, + 'C<echo macro_user_1>' + ); + output "C<macro_user_1_command=env | grep CSSH>"; + output $self->loc( + q{ + would send the CSSH environment variables to the client. + }, + ); + + output $self->loc("The following environment variables are set in the shell of the macro process"); + output '=over'; + output '=item C<CSSH_SERVERNAME>'; + output '=item C<CSSH_HOSTNAME>'; + output '=item C<CSSH_USERNAME>'; + output '=item C<CSSH_CONNECTION_STRING>'; + output '=item C<CSSH_CONNECTION_PORT>'; + output '=item C<CSSH_VERSION>'; + output '=back'; + output '=item macros_enabled = yes'; output $self->loc( q{Enable or disable macro replacement. Note: this affects all the [_1] variables above.}, @@ -1127,17 +1179,17 @@ =item $obj=ClusterSSH::Getopts->add_common_options ({ }) -Add common options used by most calling scripts into the allowed set for +Add common options used by most calling scripts into the allowed set for parsing from the command line =item $obj=ClusterSSH::Getopts->add_common_session_options ({ }) -Add common session options used by most calling scripts into the allowed +Add common session options used by most calling scripts into the allowed set for parsing from the command line =item $obj=ClusterSSH::Getopts->add_common_ssh_options ({ }) -Add common ssh options used by most calling scripts into the allowed +Add common ssh options used by most calling scripts into the allowed set for parsing from the command line =item $obj->getopts diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clusterssh-4.13.2_02/lib/App/ClusterSSH/Window/Tk.pm new/clusterssh-4.14/lib/App/ClusterSSH/Window/Tk.pm --- old/clusterssh-4.13.2_02/lib/App/ClusterSSH/Window/Tk.pm 2019-01-14 21:06:43.000000000 +0100 +++ new/clusterssh-4.14/lib/App/ClusterSSH/Window/Tk.pm 2019-08-21 22:15:44.000000000 +0200 @@ -10,6 +10,7 @@ use base qw/ App::ClusterSSH::Base /; use vars qw/ %keysymtocode %keycodetosym /; +use Net::Domain qw(hostfqdn); use File::Temp qw/:POSIX/; use Fcntl; use POSIX ":sys_wait_h"; @@ -19,6 +20,8 @@ use Tk::ROText; require Tk::Dialog; require Tk::LabEntry; +use Symbol qw/ gensym /; +use IPC::Open3; use X11::Protocol 0.56; use X11::Protocol::Constants qw/ Shift Mod5 ShiftMask /; use X11::Protocol::WM 29; @@ -592,17 +595,20 @@ my $macro_servername = $self->config->{macro_servername}; ( my $servername = $svr ) =~ s/\s+//; $text =~ s!$macro_servername!$servername!xsmg; + $ENV{CSSH_SERVERNAME} = $servername; } { my $macro_hostname = $self->config->{macro_hostname}; - my $hostname = $servers{$svr}{givenname}; + my $hostname = hostfqdn(); $text =~ s!$macro_hostname!$hostname!xsmg; + $ENV{CSSH_HOSTNAME} = $hostname; } { my $macro_username = $self->config->{macro_username}; my $username = $servers{$svr}{username}; $username ||= getpwuid($UID); $text =~ s!$macro_username!$username!xsmg; + $ENV{CSSH_USERNAME} = $username; } { my $macro_newline = $self->config->{macro_newline}; @@ -610,8 +616,56 @@ } { my $macro_version = $self->config->{macro_version}; - my $version = $self->parent->VERSION; + my $version = $self->parent->VERSION; $text =~ s/$macro_version/$version/xsmg; + $ENV{CSSH_VERSION} = $version; + } + + $ENV{CSSH_CONNECTION_STRING} = $servers{$svr}{connect_string}; + $ENV{CSSH_CONNECTION_PORT} = $servers{$svr}{port}; + + # Set up environment variables in the macro environment + for my $i (qw/ 1 2 3 4 / ) { + my $macro_user_command = 'macro_user_'.$i.'_command'; + my $macro_user = $self->config->{'macro_user_'.$i}; + + next unless $text =~ $macro_user; + if( ! $self->config->{ $macro_user_command } ) { + $text =~ s/$macro_user//xsmg; + next; + } + + my $cmd = $self->config->{ $macro_user_command }; + + local $SIG{CHLD} = undef; + + my $stderr_fh = gensym; + my $stdout_fh = gensym; + my $child_pid = eval { open3(undef, $stdout_fh, $stderr_fh, $cmd) }; + + if (my $err=$@) { + # error message is hardcoded into open3 - tidy it up a little for our users + $err=~ s/ at .*//; + $err=~ s/open3: //; + $err =~ s/( failed)/' $1/; + $err =~ s/(exec of) /$1 '/; + warn "Macro failure for '$macro_user_command': $err"; + next; + } + waitpid($child_pid, 0); + my $cmd_rc = $? >> 8; + + my @stdout = <$stdout_fh>; + my @stderr = <$stderr_fh>; + + if ( $cmd_rc > 0 || @stderr ){ + warn "Macro failure for '$macro_user_command'",$/; + warn "Exited with error output:: @stderr" if @stderr; + warn "Exited with non-zero return code: $cmd_rc", $/ if $cmd_rc; + } else { + #$self->send_text_to_all_servers( $stdout ); + return join('', @stdout); + } } return $text; @@ -1544,6 +1598,18 @@ $self->send_text_to_all_servers( $self->config->{macro_username} ) if ( $hotkey eq "key_username" ); + $self->send_text_to_all_servers( + $self->config->{macro_user_1} ) + if ( $hotkey eq "key_user_1" ); + $self->send_text_to_all_servers( + $self->config->{macro_user_2} ) + if ( $hotkey eq "key_user_2" ); + $self->send_text_to_all_servers( + $self->config->{macro_user_3} ) + if ( $hotkey eq "key_user_3" ); + $self->send_text_to_all_servers( + $self->config->{macro_user_4} ) + if ( $hotkey eq "key_user_4" ); $self->add_host_by_name() if ( $hotkey eq "key_addhost" ); $self->retile_hosts("force") @@ -1608,6 +1674,40 @@ -command => sub { $self->show_history; }, -accelerator => $self->config->{key_history}, ], + [ "checkbutton", + "Auto Quit", + -variable => \$self->config->{auto_quit}, + -offvalue => 'no', + -onvalue => 'yes', + ], + + # While this autoclose menu works as expected, the functionality + # within terminals does not. "auto_close" is set when the terminal + # is opened and is not updated when the variable is changed. + # + # [ "cascade" => "Auto Close", + # -menuitems => [ + # [ "radiobutton", + # "Auto Close", + # -variable => \$self->config->{auto_close}, + # -label => 'Off', + # -value => '0', + # ], + # [ "radiobutton", + # "Auto Close", + # -variable => \$self->config->{auto_close}, + # -label => '5 Seconds', + # -value => '5', + # ], + # [ "radiobutton", + # "Auto Close", + # -variable => \$self->config->{auto_close}, + # -label => '10 Seconds', + # -value => '10', + # ], + # ], + # -tearoff => 0, + # ], [ "command", "Exit", -command => sub { $self->parent->exit_prog }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clusterssh-4.13.2_02/lib/App/ClusterSSH.pm new/clusterssh-4.14/lib/App/ClusterSSH.pm --- old/clusterssh-4.13.2_02/lib/App/ClusterSSH.pm 2019-01-14 21:06:43.000000000 +0100 +++ new/clusterssh-4.14/lib/App/ClusterSSH.pm 2019-08-21 22:15:44.000000000 +0200 @@ -5,7 +5,7 @@ # ABSTRACT: Cluster administration tool # ABSTRACT: Cluster administration tool -use version; our $VERSION = version->new('4.13.2_02'); +use version; our $VERSION = version->new('4.14'); =head1 SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clusterssh-4.13.2_02/t/15config.t new/clusterssh-4.14/t/15config.t --- old/clusterssh-4.13.2_02/t/15config.t 2019-01-14 21:06:43.000000000 +0100 +++ new/clusterssh-4.14/t/15config.t 2019-08-21 22:15:44.000000000 +0200 @@ -52,6 +52,10 @@ key_macros_enable => "Alt-p", key_paste => "Control-v", key_username => "Alt-u", + key_user_1 => "Alt-1", + key_user_2 => "Alt-2", + key_user_3 => "Alt-3", + key_user_4 => "Alt-4", mouse_paste => "Button-2", auto_quit => "yes", auto_close => 5, @@ -109,6 +113,15 @@ macro_username => '%u', macro_newline => '%n', macro_version => '%v', + macro_user_1 => '%1', + macro_user_2 => '%2', + macro_user_3 => '%3', + macro_user_4 => '%4', + + macro_user_1_command => '', + macro_user_2_command => '', + macro_user_3_command => '', + macro_user_4_command => '', max_addhost_menu_cluster_items => 6, menu_send_autotearoff => 0, @@ -188,6 +201,9 @@ $expected{screen_reserve_right} = 100; $expected{screen_reserve_top} = 100; $expected{screen_reserve_bottom} = 160; + +# Note: the parse_config here removes the key_user_x entries +delete( $expected{"key_user_$_"} ) for (qw/ 1 2 3 4 /); trap { $config = $config->parse_config_file( $file, ); }; @@ -328,6 +344,9 @@ print $csshrc 'auto_quit = no', $/; close($csshrc); $expected{auto_quit} = 'no'; + +# Note: the load_configs here removes the key_user_x entries +delete( $expected{"key_user_$_"} ) for (qw/ 1 2 3 4 /); $config = App::ClusterSSH::Config->new(); trap { $config->load_configs(); @@ -565,11 +584,23 @@ key_paste=Control-v key_quit=Alt-q key_retilehosts=Alt-r +key_user_1=Alt-1 +key_user_2=Alt-2 +key_user_3=Alt-3 +key_user_4=Alt-4 key_username=Alt-u lang=en macro_hostname=%h macro_newline=%n macro_servername=%s +macro_user_1=%1 +macro_user_1_command= +macro_user_2=%2 +macro_user_2_command= +macro_user_3=%3 +macro_user_3_command= +macro_user_4=%4 +macro_user_4_command= macro_username=%u macro_version=%v macros_enabled=yes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clusterssh-4.13.2_02/t/15config.t.file3 new/clusterssh-4.14/t/15config.t.file3 --- old/clusterssh-4.13.2_02/t/15config.t.file3 2019-01-14 21:06:43.000000000 +0100 +++ new/clusterssh-4.14/t/15config.t.file3 2019-08-21 22:15:44.000000000 +0200 @@ -16,6 +16,10 @@ key_quit=Control-q key_retilehosts=Alt-r key_username=Alt-n +key_user_1=Alt-1 +key_user_2=Alt-2 +key_user_3=Alt-3 +key_user_4=Alt-4 max_host_menu_items=30 method=ssh mouse_paste=Button-2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clusterssh-4.13.2_02/t/changes.t new/clusterssh-4.14/t/changes.t --- old/clusterssh-4.13.2_02/t/changes.t 2019-01-14 21:06:43.000000000 +0100 +++ new/clusterssh-4.14/t/changes.t 2019-08-21 22:15:44.000000000 +0200 @@ -1,4 +1,9 @@ use Test::More; + +unless ( $ENV{RELEASE_TESTING} ) { + plan( skip_all => "Author tests not required for installation" ); +} + eval 'use Test::CPAN::Changes'; plan skip_all => 'Test::CPAN::Changes required for this test' if $@; changes_ok();