mirror of
https://github.com/centreon/centreon-plugins.git
synced 2025-07-31 01:24:35 +02:00
111 lines
2.8 KiB
Perl
111 lines
2.8 KiB
Perl
#!/usr/bin/perl
|
|
use strict;
|
|
use warnings;
|
|
use Libssh::Session qw(:all);
|
|
use POSIX qw(WIFEXITED WEXITSTATUS);
|
|
|
|
# Install SSH server
|
|
if (-f "/etc/debian_version") {
|
|
system("apt-get update") == 0
|
|
or die "apt-update failed: $?";
|
|
system("apt-get install -y openssh-server") == 0
|
|
or die "Installation failed: $?";
|
|
} elsif (-f "/etc/redhat-release") {
|
|
system("dnf install -y openssh-server") == 0
|
|
or die "Installation failed: $?";
|
|
} else {
|
|
die "Unsupported operating system";
|
|
}
|
|
|
|
mkdir("/var/run/sshd") unless -d "/var/run/sshd";
|
|
|
|
system("ssh-keygen -A") == 0
|
|
or die "SSH keys generation failed: $?";
|
|
|
|
if (getpwnam("testuser")) {
|
|
print "User testuser already exists\n";
|
|
} else {
|
|
system("useradd -m testuser") == 0
|
|
or die "User creation failed: $?";
|
|
}
|
|
|
|
system("echo 'testuser:testpassword' | chpasswd") == 0
|
|
or die "Password configuration failed: $?";
|
|
|
|
# SSH configuration
|
|
open(my $fh, '>', '/etc/ssh/sshd_config')
|
|
or die "Cannot open sshd_config: $!";
|
|
print $fh "Port 2222\n";
|
|
print $fh "PermitRootLogin no\n";
|
|
print $fh "AllowUsers testuser\n";
|
|
print $fh "PasswordAuthentication yes\n";
|
|
close($fh);
|
|
|
|
# Start SSH server
|
|
my $pid = fork();
|
|
die "Fork failed: $!" unless defined $pid;
|
|
|
|
if ($pid == 0) {
|
|
exec("/usr/sbin/sshd", "-D")
|
|
or die "Cannot start SSH server: $!";
|
|
}
|
|
|
|
# Wait and check the port
|
|
sleep(5);
|
|
|
|
# Check the port with Perl
|
|
use IO::Socket::INET;
|
|
my $sock = IO::Socket::INET->new(
|
|
PeerAddr => '127.0.0.1',
|
|
PeerPort => 2222,
|
|
Proto => 'tcp'
|
|
);
|
|
|
|
die "Port SSH 2222 is not listening" unless $sock;
|
|
$sock->close();
|
|
|
|
# Connection test with Libssh::Session
|
|
eval {
|
|
my $session = Libssh::Session->new();
|
|
$session->options(
|
|
host => "127.0.0.1",
|
|
port => 2222,
|
|
user => "testuser",
|
|
LogVerbosity => 1,
|
|
PrintError => 1,
|
|
Timeout => 10
|
|
);
|
|
|
|
print "Trying to connect...\n";
|
|
$session->connect() == SSH_OK or die "Connection failed: " . $session->get_error();
|
|
|
|
print "Trying to authenticate...\n";
|
|
$session->auth_password(password => "testpassword") == SSH_AUTH_SUCCESS or die "Authentification failed: " . $session->get_error();
|
|
|
|
print "SSH connection test succeeded\n";
|
|
$session->disconnect();
|
|
};
|
|
if ($@) {
|
|
kill 'TERM', $pid;
|
|
die "Test failed: $@";
|
|
}
|
|
|
|
# Cleaning
|
|
kill 'TERM', $pid;
|
|
waitpid($pid, 0);
|
|
|
|
# Uninstall SSH server
|
|
if (-f "/etc/debian_version") {
|
|
system("apt-get autoremove -y --purge openssh-server") == 0
|
|
or die "Uninstallation failed: $?";
|
|
} elsif (-f "/etc/redhat-release") {
|
|
system("dnf autoremove --setopt=keepcache=True -y openssh-server") == 0
|
|
or die "Uninstallation failed: $?";
|
|
} else {
|
|
die "Unsupported operating system";
|
|
}
|
|
|
|
system("userdel -r testuser") == 0
|
|
or die "Cannot delete user: $?";
|
|
|
|
print "Test and cleanup succeeded\n"; |