PHP аутентификация с помощью ppk, rsa, pkcs8 - PullRequest
3 голосов
/ 08 апреля 2020

Я очень новичок в PHP. Я пытаюсь запустить PHP скрипт (из моего windows ящика), который просто S SH в кучу linux серверов (Net / SSH2. php), использующих в списке, запускает одна команда bash на каждом сервере, и выводит результаты в файл. Он отлично работал до того, как моя компания начала использовать ключи RSA. Теперь у меня есть 3 файла, файл .pkcs8 (ENCRYPTED PRIVATE KEY), файл .rsa (BEGIN RSA PRIVATE KEY) и .ppk (putty, который включает в себя как publi c, так и приватные строки в одном файле). Я смог использовать .ppk с putty и аутентифицироваться, предоставив только свой ID пользователя, поэтому я уверен, что это возможно. Мне просто нужно, чтобы это работало в моих PHP скриптах.

# multiple server file query script

    # define username and password
    $username = "1234567";
    $password = "xxxxxxx";

    # create variables and array for reading servers from txt document
    # then exploding the contents of the txt file into a variable
    $text_file_contents = file_get_contents ("serverlist.txt");
    $server_array = explode("\r\n", $text_file_contents);

    # using the SSH2 tie-in for PHP
    include 'Net/SSH2.php';

    foreach($server_array as $server) {

        $ssh = new Net_SSH2($server);
        if (!$ssh->login($username, $password)) {
            echo "\r\n";
            echo "------------------------------------";
            echo "\r\n";

        } else {
            $cmd = $ssh->exec('BASH_COMMAND_HERE');
            echo "$server";
            echo "\r\n";
            echo "\r\n";
            echo "$cmd";
            echo "\r\n";
            echo "------------------------------------";
            echo "\r\n";
        }       
        $ssh->disconnect();
    }
  ?>

Проводя некоторые исследования, я думаю, что мне нужно как-то вызвать эти ключи через phpseclib, однако инструкции были неясны, и я не смог Я не знаю, какие файлы мне нужно вызывать и как использовать их в моем коде, а также что мне, возможно, придется удалить из кода выше, так как теперь я должен проходить аутентификацию другим способом. Я также довольно сильно заперт компанией, поэтому чем больше я могу обходиться без дополнительных библиотек, тем лучше. Мне удалось получить библиотеку RSA. php на моем ноутбуке, но я думаю, что мне могут понадобиться дополнительные библиотеки?

Спасибо за любую помощь, которую вы можете оказать, и если нет, я продолжу подключаться к это и блокировка моей учетной записи;)

1 Ответ

1 голос
/ 08 апреля 2020

Попробуйте:

# multiple server file query script

    include 'Crypt/RSA.php';

    # define username and password
    $username = "1234567";
    $key = new Crypt_RSA;
    //$key->setPassword('whatever');
    $key->loadKey(file_get_contents('/path/to/key'));

    # create variables and array for reading servers from txt document
    # then exploding the contents of the txt file into a variable
    $text_file_contents = file_get_contents ("serverlist.txt");
    $server_array = explode("\r\n", $text_file_contents);

    # using the SSH2 tie-in for PHP
    include 'Net/SSH2.php';

    foreach($server_array as $server) {

        $ssh = new Net_SSH2($server);
        if (!$ssh->login($username, $key)) {
            echo "\r\n";
            echo "------------------------------------";
            echo "\r\n";

        } else {
            $cmd = $ssh->exec('BASH_COMMAND_HERE');
            echo "$server";
            echo "\r\n";
            echo "\r\n";
            echo "$cmd";
            echo "\r\n";
            echo "------------------------------------";
            echo "\r\n";
        }       
        $ssh->disconnect();
    }
  ?>

Я добавил include 'Crypt/RSA.php'; и заменил вашу строку $password = 'xxxx'; на следующую:

    $key = new Crypt_RSA;
    //$key->setPassword('whatever');
    $key->loadKey(file_get_contents('/path/to/key'));

Затем я заменил вашу строку $ssh->login() на $ssh->login($username, $key).

...