my $s = Net::Appliance::Session->new({
personality => "FreeBSD411",
add_library => "./PhaseBooks",
transport => 'SSH',
host => $host,
#privileged_paging => 1, # only if using ASA/PIX OS 7+
# and there are other behaviour options, see below
connect_options => {
opts => [
'-p', '22', # connect to non-standard port on remote host
#'-o', 'CheckHostIP=no', # don't check host IP in known_hosts file
],
},
log_config => {
dispatchers => ['screen','file'],
screen => {
class => 'Log::Dispatch::Screen',
min_level => 'warning',
},
file => {
class => 'Log::Dispatch::File',
min_level => 'debug',
filename => '/var/log/myapp.log',
mode => 'append',
format => '[%d] %m',
},
},
});
$s->set_global_log_at('debug');
try {
my @result = shift;
my @cmds = ('whoami','uname -a','df -h');
$s->connect({ username => $user, password => $pass, privileged_password => $su_pass});
$s->disable_paging(1);
$s->begin_privileged({$su_pass}); ## I don't know how to call this ;) or Doesn't work ?
push @result, $s->cmd("$cmds[0]");
#push @result, $s->cmd("$cmds[1]");
#push @result, $s->cmd("$cmds[2]");
$s->end_privileged;
print "Host: $host \"@cmds\": @result \n";
}
catch {
warn "failed to execute command: $_";
}
finally {
$s->close;
};
####
prompt user
match /[Uu]sername: $/
prompt pass
match /[Pp]assword:\s+$/
prompt passsu
match /[Pp]assword:$/
prompt generic03
match /\/]\$\s+$/
prompt generic01
match /\/\]\$\s+$/
prompt generic02
match /from$/
prompt generic
match /\s+\/]\$$/
prompt privileged
# match /^root@.+#\s+$/
match /^\[root@.+\~\]\#\s+$/
macro begin_privileged
send su -
match passsu or privileged
macro end_privileged
send exit
match generic
macro disconnect
send logout
macro paging
send ''
# send terminal length %s
####
......
[ 0.589068] di queueing data for send: ""
[ 0.589289] tr callback received for match
[ 0.600092] du SEEN:
[user1@freebsd411 /]$
[ 0.600355] tr output matched (?-xism:\s+\/]\$$), storing and returning
[ 0.600926] pr output matching prompt was "[user1@freebsd411 /]$"
[ 0.601122] pr setting new prompt to (?-xism:\s+\/]\$$)
[ 0.601267] pr prompt has been set to (?-xism:\s+\/]\$$)
[ 0.601403] di trimmed command response:
Odd number of elements in anonymous hash at ./send-cmds.pl line 58.
[ 0.602153] en running macro begin_privileged
[ 0.602440] en executing actions
[ 0.602699] en dispatching to execute method
[ 0.603191] tr callback received for send
[ 0.603317] di queueing data for send: "su -"
[ 0.603535] tr callback received for match
[ 0.620060] du SEEN:
Password:
[ 0.620492] tr output matched (?-xism:[Pp]assword:$), storing and returning
[ 0.622734] pr output matching prompt was "Password:"
[ 0.622947] pr setting new prompt to (?-xism:[Pp]assword:$)
[ 0.623088] pr prompt has been set to (?-xism:[Pp]assword:$)
[ 0.623219] di trimmed command response:
failed to execute command: should be in privileged mode but prompt does not match at /Volumes/lala/Ports/lib/perl5/site_perl/5.12.4/Net/Appliance/Session/Engine.pm line 110.
[ 0.624138] en running macro paging
[ 0.624271] en macro params are: 24
[ 0.624580] en executing actions
[ 0.624828] en dispatching to execute method
[ 0.625317] tr callback received for send
[ 0.625444] di queueing data for send: ""
[ 0.625665] tr callback received for match
[ 0.640885] du SEEN:
Sorry
[user1@freebsd411 /]$
..............................
####
$s->begin_privileged({$su_pass}); ## I don't know how to call/use this ;) or Doesn't work ?
####
110 $self->prompt_looks_like('privileged')
111 or die 'should be in privileged mode but prompt does not match';
112 $self->in_privileged_mode(1);