#script sshCmdExpect.sh
###############################################
#!/usr/bin/expect -f
spawn ssh [lindex $argv 1]@[lindex $argv 0]
expect "yes/no" {
send "yes\r"
expect "*?assword" { send "[lindex $argv 2]\r" }
} "*?assword" { send "[lindex $argv 2]\r" }
expect "[lindex $argv 1]@*$ " { send "[lindex $argv 3]\r" }
if {$argc >= 5} {
expect "*?assword" { send "[lindex $argv 4]\r" }
if {$argc > 5} {
expect "*@*\[#$\] " { send "[lindex $argv 5]\r" }
}
}
expect "[lindex $argv 1]@*$ " { }
spawn ssh [lindex $argv 1]@[lindex $argv 0]
expect "yes/no" {
send "yes\r"
expect "*?assword" { send "[lindex $argv 2]\r" }
} "*?assword" { send "[lindex $argv 2]\r" }
expect "[lindex $argv 1]@*$ " { send "[lindex $argv 3]\r" }
if {$argc >= 5} {
expect "*?assword" { send "[lindex $argv 4]\r" }
if {$argc > 5} {
expect "*@*\[#$\] " { send "[lindex $argv 5]\r" }
}
}
expect "[lindex $argv 1]@*$ " { }
###############################################
#perl script
###############################################
sub sshRunCmd {
my ($host, $login, $passwd, $cmd) = @_;
my $suPasswd = $_[4] || "NULL";
my $cmdAfterSu = $_[5] || "NULL";
my $result;
if("$suPasswd" eq "NULL") {
$result = `./sshCmdExpect.sh $host $login $passwd "$cmd"`;
}
elsif("$cmdAfterSu" eq "NULL") {
$result = `./sshCmdExpect.sh $host $login $passwd "$cmd" $suPasswd`;
}
else {
$result = `./sshCmdExpect.sh $host $login $passwd "$cmd" $suPasswd "$cmdAfterSu"`;
print "./sshCmdExpect.sh $host $login $passwd $cmd $suPasswd $cmdAfterSu\n";
}
exit;
my @resultLines = split /\n/, $result;
my @newResultLines;
my $ctrl = 0;
foreach my $line (@resultLines) {
if("$cmdAfterSu" eq "NULL") {
if($line =~ /$cmd/) {
$ctrl = 1;
}
}
elsif("$cmdAfterSu" ne "NULL") {
if($line =~ /$cmdAfterSu/) {
$ctrl = 1;
}
}
elsif($ctrl == 1) {
push @newResultLines, $line;
}
}
return \@newResultLines;
}
my ($host, $login, $passwd, $cmd) = @_;
my $suPasswd = $_[4] || "NULL";
my $cmdAfterSu = $_[5] || "NULL";
my $result;
if("$suPasswd" eq "NULL") {
$result = `./sshCmdExpect.sh $host $login $passwd "$cmd"`;
}
elsif("$cmdAfterSu" eq "NULL") {
$result = `./sshCmdExpect.sh $host $login $passwd "$cmd" $suPasswd`;
}
else {
$result = `./sshCmdExpect.sh $host $login $passwd "$cmd" $suPasswd "$cmdAfterSu"`;
print "./sshCmdExpect.sh $host $login $passwd $cmd $suPasswd $cmdAfterSu\n";
}
exit;
my @resultLines = split /\n/, $result;
my @newResultLines;
my $ctrl = 0;
foreach my $line (@resultLines) {
if("$cmdAfterSu" eq "NULL") {
if($line =~ /$cmd/) {
$ctrl = 1;
}
}
elsif("$cmdAfterSu" ne "NULL") {
if($line =~ /$cmdAfterSu/) {
$ctrl = 1;
}
}
elsif($ctrl == 1) {
push @newResultLines, $line;
}
}
return \@newResultLines;
}
$cmd = "su root";
$perlCmd = 'perl -pi -e \'s/127.0.1.1(\s+localhost)/'.${ipAddr}.'\${1}/\' /etc/hosts';
my $ipAddrChangePtr = &sshRunCmd($ipAddr, $login, $passwd, $cmd, $rootPasswd, $perlCmd);