diff --git a/xCAT-server/lib/xcat/plugins/blade.pm b/xCAT-server/lib/xcat/plugins/blade.pm index 42b3c3d7a..978c8c59a 100644 --- a/xCAT-server/lib/xcat/plugins/blade.pm +++ b/xCAT-server/lib/xcat/plugins/blade.pm @@ -490,16 +490,6 @@ sub mpaconfig { } next; } - if ($parameter =~ /^sshcfg$/i) { - my $data = $session->get(['1.3.6.1.4.1.2.3.51.2.4.9.3.4.10',0]); - if ($data =~ /NOSUCHOBJECT/) { - push @cfgtext,"SSH: Not supported"; - } elsif ($data) { - push @cfgtext,"SSH: enabled"; - } else { - push @cfgtext,"SSH: disabled"; - } - } if ($parameter eq "snmpdest") { $parameter = "snmpdest1"; } @@ -1663,7 +1653,7 @@ sub telnetcmds { # most of these commands should be able to be done # through SNMP, but they produce various errors. foreach my $cmd (@_) { - if ($cmd =~ /^swnet|pd1|pd2|=/) { + if ($cmd =~ /^swnet|pd1|pd2|sshcfg|=/) { if (($cmd =~ /^textid/) and ($nodeid > 0)) { push @unhandled,$cmd; next; @@ -1896,8 +1886,10 @@ sub sshcfg { my $uid = shift; my $fname = ((xCAT::Utils::isAIX()) ? "/.ssh/":"/root/.ssh/")."id_rsa.pub"; - if ($value !~ /^enable|disable$/i) { - return([1,"Invalid argument '$value' (enable|disable)"]); + if ($value) { + if ($value !~ /^enable|disable$/i) { + return([1,"Invalid argument '$value' (enable|disable)"]); + } } # Does MM support SSH my @data = $t->cmd("sshcfg -hk rsa -T system:mm[1]"); @@ -1915,10 +1907,6 @@ sub sshcfg { return([1,"SSH supported on AMM with minimum firmware BPET32"]); } - if ($value =~ /^disable$/i) { - @data = $t->cmd("ports -sshe off -T system:mm[1]"); - return([0,"OK"]); - } # Get SSH key on Management Node unless (open(RSAKEY,"<$fname")) { return([1,"Error opening '$fname'"]); @@ -1943,6 +1931,26 @@ sub sshcfg { # Determine is key already exists on MM @data = $t->cmd("users -$id -pk all -T system:mm[1]"); + # Query if enabled/disabled + if (!$value) { + my @ddata = $t->cmd("sshcfg -T system:mm[1]"); + + if (my ($d) = grep(/^-cstatus\s+(\S+)$/,@ddata)) { + if ($d=~ /\s(\S+)$/) { + if ($1=~ /^disabled/i) { + return([0,"SSH: disabled"]); + } + } + } + # Find login + foreach (split(/Key\s+/,join('',@data))) { + if (/-cm\s+$login/) { + return([0,"SSH: enabled"]); + } + } + return([0,"SSH: disabled"]); + } + # Remove existing keys for this login foreach (split(/Key\s+/,join('',@data))) { if (/-cm\s+$login/) { @@ -1951,6 +1959,13 @@ sub sshcfg { @data = $t->cmd("users -$id -pk -$key -remove -T system:mm[1]"); } } + if ($value =~ /^disable$/i) { + if (!grep(/^OK$/i, @data)) { + return([1,"SSH Key not found on MM"]); + } + return([0,"disabled"]); + } + # Make sure SSH key is generated on MM @data = $t->cmd("sshcfg -hk rsa -T system:mm[1]"); @@ -1975,9 +1990,13 @@ sub sshcfg { } # Transfer SSH key from Management Node to MM $sshkey =~ s/@/\@/; + $t->cmd("users -$id -at set -T system:mm[1]"); @data = $t->cmd("users -$id -pk -T system:mm[1] -add $sshkey"); if ($data[0]=~/Error/i) { + if ($data[0]=~/Error writing data for option -add/i) { + return([1,"Maximum number of SSH keys reached for this chassis"]); + } return([1,$data[0]]); } # Enable ssh on MM @@ -2116,6 +2135,8 @@ sub dompa { print $out freeze([\%output]); print $out "\nENDOFFREEZE6sK4ci\n"; + yield; + waitforack($out); } } }