authorized_keys file (server)
with command restricted to the service application
$ ./time-client.pl 17:25:3
$ cat -n time-client.pl
1 #!/usr/bin/env perl
2 use lib '../lib';
3 use warnings;
4 use strict;
5 use SSH::RPC::Client;
6 use Getopt::Long;
7
8 my ($host, $hires);
9
10 $host = 'sshrpc';
11 my $ssh = SSH::RPC::Client->new($host);
12 my $command = ($hires) ? "hiResTime" : "time";
13 my $result = $ssh->run($command);
14 if ($result->isSuccess) {
15 if ($hires) {
16 printf "%02d:%02d:%02d.%d\n", @{$result->getResponse};
17 }
18 else {
19 print $result->getResponse."\n";
20 }
21 }
22 else {
23 die $result->getError;
24 }
$ cat -n time-shell.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use TimeShell;
5
6 TimeShell->run();
El Módulo cargado por el servidor:
$ cat -n TimeShell.pm
1 package TimeShell;
2
3 use lib '../lib';
4 use strict;
5 use base 'SSH::RPC::Shell';
6 use Time::HiRes;
7
8 sub run_time {
9 my @time = localtime(time());
10 return {
11 status => 200,
12 response => join(":", $time[2], $time[1], $time[0]),
13 };
14 }
15
16 sub run_hiResTime {
17 my ($seconds, $microseconds) = Time::HiRes::gettimeofday();
18 my @time = localtime($seconds);
19 return {
20 status => 200,
21 response => [ $time[2], $time[1], $time[0], $microseconds ],
22 };
23 }
24
25 1;
Comando forzado:
pp2@nereida:~/Lbook$ cat /home/pp2/.ssh/authorized_keys ssh-dss ... ... command="/home/pp2/Lperltesting/SSHRPC/examples/time-shell.pl" ssh-dss AAAA...= casiano@MacBookdeCasiano.local
