]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
display active logins at remote.cgi
authorPeter Müller <peter.mueller@link38.eu>
Sat, 20 Jan 2018 17:24:31 +0000 (18:24 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 7 May 2018 10:37:10 +0000 (11:37 +0100)
Display active user logins (both local and remote) at
the remote.cgi page in the WebUI. This might be useful
for debugging broken SSH sessions or simply checking that
nobody is currently logged in. :-)

Signed-off-by: Peter Müller <peter.mueller@link38.eu>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
html/cgi-bin/remote.cgi

index 10a3e87cc0c1ed9305e9a6d19423180b83105c40..5acce4e997b60f8dda7e31b514ae0e8500f27085 100644 (file)
@@ -25,15 +25,23 @@ use strict;
 #use warnings;
 #use CGI::Carp 'fatalsToBrowser';
 
+use IO::Socket;
+
 require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/geoip-functions.pl";
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
 
+my %color = ();
+my %mainsettings = ();
 my %remotesettings=();
 my %checked=();
 my $errormessage='';
 my $counter = 0;
 
+&General::readhash("${General::swroot}/main/settings", \%mainsettings);
+&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
+
 &Header::showhttpheaders();
 
 $remotesettings{'ENABLE_SSH'} = 'off';
@@ -187,6 +195,38 @@ print "</table>\n";
 
 &Header::closebox();
 
+&Header::openbox('100%', 'center', $Lang::tr{'ssh active sesstions'});
+
+print <<END;
+               <table class="tbl" width='66%'>
+                       <thead>
+                               <tr>
+                                       <th align="center">
+                                               <strong>$Lang::tr{'ssh username'}</strong>
+                                       </th>
+                                       <th align="center">
+                                               <strong>$Lang::tr{'ssh login time'}</strong>
+                                       </th>
+                                       <th align="center">
+                                               <strong>$Lang::tr{'ip address'}</strong>
+                                       </th>
+                                       <th align="center">
+                                               <strong>$Lang::tr{'country'}</strong>
+                                       </th>
+                                       <th align="center">
+                                               <strong>$Lang::tr{'rdns'}</strong>
+                                       </th>
+                               </tr>
+                       </thead>
+                       <tbody>
+END
+
+&printactivelogins();
+
+print "</tbody>\n</table>\n";
+
+&Header::closebox();
+
 &Header::closebigbox();
 
 &Header::closepage();
@@ -205,3 +245,54 @@ sub viewkey
     print "<tr><td>$key ($name)</td><td><code>$fingerprint</code></td><td align='center'>$keysize</td></tr>\n";
   }
 }
+
+sub printactivelogins()
+{
+       # print active SSH logins (grep outpout of "who -s")
+       my $command = "who -s";
+       my @output = `$command`;
+       chomp(@output);
+
+       my $id = 0;
+
+       if ( scalar(@output) == 0 )
+       {
+               # no logins appeared
+               my $table_colour = ($id++ % 2) ? $color{'color22'} : $color{'color20'};
+               print "<tr bgcolor='$table_colour'><td colspan='5'>$Lang::tr{'ssh no active logins'}</td></tr>\n";
+       } else {
+               # list active logins...
+
+               foreach my $line (@output)
+               {
+                       my @arry = split(/\ +/, $line);
+
+                       my $username = @arry[0];
+                       my $logintime = join(' ', @arry[2..4]);
+                       my $remoteip = @arry[5];
+                       $remoteip =~ s/[()]//g;
+
+                       # display more information about that IP adress...
+                       my $ccode = &GeoIP::lookup($remoteip);
+                       my $flag_icon = &GeoIP::get_flag_icon($ccode);
+
+                       # get rDNS...
+                       my $iaddr = inet_aton($remoteip);
+                       my $rdns = gethostbyaddr($iaddr, AF_INET);
+                       if (!$rdns) { $rdns = $Lang::tr{'lookup failed'}; };
+
+                       my $table_colour = ($id++ % 2) ? $color{'color22'} : $color{'color20'};
+
+                       print <<END;
+                       <tr bgcolor='$table_colour'>
+                               <td>$username</td>
+                               <td>$logintime</td>
+                               <td>$remoteip</td>
+                               <td align='center'><a href='country.cgi#$ccode'><img src='$flag_icon' border='0' alt='$ccode' title='$ccode' /></a></td>
+                               <td>$rdns</td>
+                       </tr>
+END
+;
+               }
+       }
+}