mirror of
https://github.com/duncs/clusterssh.git
synced 2025-04-21 09:09:06 +00:00
Add in 'ccon' command
Thanks for Brandon Perkins for the patch
This commit is contained in:
parent
e58a20de24
commit
f04b4040ae
10 changed files with 65 additions and 10 deletions
2
Changes
2
Changes
|
@ -1,5 +1,7 @@
|
|||
????-??-?? Duncan Ferguson <duncan_ferguson@user.sf.net> - v4.00_09
|
||||
* Cater for missing 'pod2text' command (Thanks to Sami Kerola)
|
||||
* Fix 'uninitialised variable' error
|
||||
* Added 'ccon' command (Thanks to Brandon Perkins)
|
||||
|
||||
2011-04-01 Duncan Ferguson <duncan_ferguson@user.sf.net> - v4.00_08
|
||||
* Amend all L<xx> links to prevent build breakage on cygwin (Sf bug 3115635)
|
||||
|
|
1
MANIFEST
1
MANIFEST
|
@ -1,4 +1,5 @@
|
|||
AUTHORS
|
||||
bin/ccon
|
||||
bin/crsh
|
||||
bin/cscp
|
||||
bin/cssh
|
||||
|
|
4
META.yml
4
META.yml
|
@ -17,7 +17,7 @@ name: App-ClusterSSH
|
|||
provides:
|
||||
App::ClusterSSH:
|
||||
file: lib/App/ClusterSSH.pm
|
||||
version: 4.00_07
|
||||
version: 4.00_09
|
||||
App::ClusterSSH::Base:
|
||||
file: lib/App/ClusterSSH/Base.pm
|
||||
version: 0.02
|
||||
|
@ -40,4 +40,4 @@ resources:
|
|||
repository:
|
||||
- http://clusterssh.git.sourceforge.net/
|
||||
- http://github.com/duncs/clusterssh
|
||||
version: 4.00_07
|
||||
version: 4.00_09
|
||||
|
|
|
@ -15,6 +15,7 @@ WriteMakefile
|
|||
},
|
||||
'INSTALLDIRS' => 'site',
|
||||
'EXE_FILES' => [
|
||||
'bin/ccon',
|
||||
'bin/crsh',
|
||||
'bin/cscp',
|
||||
'bin/cssh',
|
||||
|
|
1
THANKS
1
THANKS
|
@ -39,3 +39,4 @@ Markus Manzke
|
|||
Simon Fraser
|
||||
Stefan Steiner
|
||||
Ryan Brown
|
||||
Brandon Perkins
|
||||
|
|
2
TODO
2
TODO
|
@ -26,7 +26,7 @@ Idea from Markus Manzke
|
|||
Change way commands generated
|
||||
=============================
|
||||
|
||||
Each scrpt file (cssh, crsh, ctelnet, cscp, crsync) should define how
|
||||
Each script file (cssh, crsh, ctel, ccon, cscp, crsync) should define how
|
||||
the command is created/used and also none-common options
|
||||
|
||||
# Something like the following (needs refinement):
|
||||
|
|
1
bin/ccon
Symbolic link
1
bin/ccon
Symbolic link
|
@ -0,0 +1 @@
|
|||
cssh
|
22
bin/cssh
22
bin/cssh
|
@ -15,13 +15,14 @@ __END__
|
|||
|
||||
=head1 NAME
|
||||
|
||||
cssh, crsh, ctel - Cluster administration tool
|
||||
cssh, crsh, ctel, ccon - Cluster administration tool
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
S<< cssh [options] [[user@]<server>[:port]|<tag>] [...] >>
|
||||
S<< crsh [options] [[user@]<server>[:port]|<tag>] [...] >>
|
||||
S<< ctel [options] [<server>[:port]|<tag>] [...] >>
|
||||
S<< ccon [options] [[user@]<server>[:port]|<tag>] [...] >>
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
|
@ -37,7 +38,7 @@ nodes are kept in sync.
|
|||
Connections are opened via ssh so a correctly installed and configured
|
||||
ssh installation is required. If, however, the program is called by "crsh"
|
||||
then the rsh protocol is used (and the communications channel is insecure),
|
||||
or by "ctel" then telnet is used.
|
||||
or by "ctel" then telnet is used, or by "ccon" then console is used.
|
||||
|
||||
Extra caution should be taken when editing system files such as
|
||||
/etc/inet/hosts as lines may not necessarily be in the same order. Assuming
|
||||
|
@ -86,6 +87,12 @@ communications protocol instead of ssh.
|
|||
|
||||
=item *
|
||||
|
||||
If the code is called as ccon instead of cssh (i.e. a symlink called
|
||||
ccon points to the cssh file or the file is renamed) console is used as the
|
||||
communications protocol instead of ssh.
|
||||
|
||||
=item *
|
||||
|
||||
When using cssh on a large number of systems to connect back to a single
|
||||
system (e.g. you issue a command to the cluster to scp a file from a given
|
||||
location) and when these connections require authentication (i.e. you are
|
||||
|
@ -123,7 +130,7 @@ Default options are shown as appropriate.
|
|||
|
||||
Run the command in each session, i.e. C<-a 'vi /etc/hosts'> to drop straight
|
||||
into a vi session. NOTE: not all communications methods support this (ssh
|
||||
and rsh should, telnet will not).
|
||||
and rsh should, telnet and console will not).
|
||||
|
||||
=item --autoquit,-q|--no-autoquit,-Q
|
||||
|
||||
|
@ -172,6 +179,11 @@ List available cluster tags.
|
|||
|
||||
Show full help test (the man page), and exit
|
||||
|
||||
=item --master,-M <master>
|
||||
|
||||
The console client program polls master as the primary server, rather than the
|
||||
default set at compile time (typically ``console'').
|
||||
|
||||
=item --options,-o "-x -o ConnectTimeout=10" - for ssh connections
|
||||
|
||||
=item --options,-o "" - for rsh connections
|
||||
|
@ -309,6 +321,10 @@ S<$ ctel -p 2022 server1 server2>
|
|||
|
||||
S<$ crsh server1 server2>
|
||||
|
||||
=item Use console with master as the primary server instead of ssh
|
||||
|
||||
S<$ ccon -M master server1 server2>
|
||||
|
||||
=back
|
||||
|
||||
=head1 FILES
|
||||
|
|
|
@ -79,6 +79,7 @@ my @options_spec = (
|
|||
'tile|g',
|
||||
'no-tile|G',
|
||||
'username|l=s',
|
||||
'master|M=s',
|
||||
'options|o=s',
|
||||
'port|p=i',
|
||||
'autoquit|q',
|
||||
|
@ -227,6 +228,8 @@ sub load_config_defaults() {
|
|||
|
||||
$config{comms} = "telnet" if ( $config{comms} eq "tel" );
|
||||
|
||||
$config{comms} = "console" if ( $config{comms} eq "con" );
|
||||
|
||||
$config{ $config{comms} } = $config{comms};
|
||||
|
||||
$config{ssh_args} = " -x -o ConnectTimeout=10"
|
||||
|
@ -235,6 +238,8 @@ sub load_config_defaults() {
|
|||
|
||||
$config{telnet_args} = "";
|
||||
|
||||
$config{console_args} = "";
|
||||
|
||||
$config{extra_cluster_file} = "";
|
||||
|
||||
$config{unmap_on_redraw} = "no"; # Debian #329440
|
||||
|
@ -349,8 +354,8 @@ sub check_config() {
|
|||
|
||||
# make sure comms in an accepted value
|
||||
die
|
||||
"FATAL: Only ssh, rsh and telnet protocols are currently supported (comms=$config{comms})\n"
|
||||
if ( $config{comms} !~ /^(:?[rs]sh|telnet)$/ );
|
||||
"FATAL: Only ssh, rsh, telnet, and console/conserver protocols are currently supported (comms=$config{comms})\n"
|
||||
if ( $config{comms} !~ /^(:?[rs]sh|telnet|console)$/ );
|
||||
|
||||
# Set any extra config options given on command line
|
||||
$config{title} = $options{title} if ( $options{title} );
|
||||
|
@ -374,6 +379,9 @@ sub check_config() {
|
|||
$config{window_tiling} = "no" if $options{'no-tile'};
|
||||
|
||||
$config{user} = $options{username} if ( $options{username} );
|
||||
|
||||
$config{mstr} = $options{master} if ( $options{master} );
|
||||
|
||||
$config{terminal_args} = $options{'term-args'}
|
||||
if ( $options{'term-args'} );
|
||||
|
||||
|
@ -926,6 +934,7 @@ sub setup_helper_script() {
|
|||
my \$svr=shift;
|
||||
my \$user=shift;
|
||||
my \$port=shift;
|
||||
my \$mstr=shift;
|
||||
my \$command="$config{$config{comms}} $config{$config{comms}."_args"} ";
|
||||
open(PIPE, ">", \$pipe) or die("Failed to open pipe: \$!\\n");
|
||||
print PIPE "\$\$:\$ENV{WINDOWID}"
|
||||
|
@ -938,6 +947,12 @@ sub setup_helper_script() {
|
|||
);
|
||||
sleep 5;
|
||||
}
|
||||
if(\$mstr) {
|
||||
unless("$config{comms}" ne "console") {
|
||||
\$mstr = \$mstr ? "-M \$mstr " : "";
|
||||
\$command .= \$mstr;
|
||||
}
|
||||
}
|
||||
if(\$user) {
|
||||
unless("$config{comms}" eq "telnet") {
|
||||
\$user = \$user ? "-l \$user " : "";
|
||||
|
@ -1040,6 +1055,7 @@ sub open_client_windows(@) {
|
|||
my $username = $server_object->get_username();
|
||||
my $port = $server_object->get_port();
|
||||
my $server = $server_object->get_hostname();
|
||||
my $master = $server_object->get_master();
|
||||
|
||||
#my ( $username, $server, $port ) = split_hostname($_);
|
||||
my $given_server_name = $server_object->get_givenname();
|
||||
|
@ -1083,6 +1099,8 @@ sub open_client_windows(@) {
|
|||
$servers{$server}{username} = $username if ($username);
|
||||
$servers{$server}{username} = $username || '';
|
||||
$servers{$server}{port} = $port || '';
|
||||
$servers{$server}{master} = $config{mstr};
|
||||
$servers{$server}{master} = $master if ($master);
|
||||
|
||||
logmsg( 2, "Working on server $server for $_" );
|
||||
|
||||
|
@ -1106,7 +1124,7 @@ sub open_client_windows(@) {
|
|||
# affecting the main program
|
||||
$servers{$server}{realname} .= "==" if ( !$realname );
|
||||
my $exec
|
||||
= "$config{terminal} $color $config{terminal_args} $config{terminal_allow_send_events} $config{terminal_title_opt} '$config{title}: $servers{$server}{connect_string}' -font $config{terminal_font} -e \"$^X\" \"-e\" '$helper_script' '$servers{$server}{pipenm}' '$servers{$server}{givenname}' '$servers{$server}{username}' '$servers{$server}{port}'";
|
||||
= "$config{terminal} $color $config{terminal_args} $config{terminal_allow_send_events} $config{terminal_title_opt} '$config{title}: $servers{$server}{connect_string}' -font $config{terminal_font} -e \"$^X\" \"-e\" '$helper_script' '$servers{$server}{pipenm}' '$servers{$server}{givenname}' '$servers{$server}{username}' '$servers{$server}{port}' '$servers{$server}{master}'";
|
||||
logmsg( 2, "Terminal exec line:\n$exec\n" );
|
||||
exec($exec) == 0 or warn("Failed: $!");
|
||||
}
|
||||
|
@ -2263,7 +2281,7 @@ App::ClusterSSH - A container for functions of the ClusterSSH programs
|
|||
=head1 SYNOPSIS
|
||||
|
||||
There is nothing in this module for public consumption. See documentation
|
||||
for F<cssh>, F<crsh>, F<ctelnet>, or F<cscp> instead.
|
||||
for F<cssh>, F<crsh>, F<ctel>, F<ccon>, or F<cscp> instead.
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
|
|
|
@ -83,6 +83,17 @@ sub set_port {
|
|||
return $self;
|
||||
}
|
||||
|
||||
sub get_master {
|
||||
my ($self) = @_;
|
||||
return $self->{master} || q{};
|
||||
}
|
||||
|
||||
sub set_master {
|
||||
my ( $self, $new_master ) = @_;
|
||||
$self->{master} = $new_master;
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub get_realname {
|
||||
my ($self) = @_;
|
||||
|
||||
|
@ -277,12 +288,16 @@ Create a new host object. 'hostname' is a required arg, 'username' and
|
|||
|
||||
=item $host->get_port
|
||||
|
||||
=item $host->get_master
|
||||
|
||||
Return specific details about the host
|
||||
|
||||
=item $host->set_username
|
||||
|
||||
=item $host->set_port
|
||||
|
||||
=item $host->set_master
|
||||
|
||||
Set specific details about the host after its been created.
|
||||
|
||||
=item get_realname
|
||||
|
|
Loading…
Add table
Reference in a new issue