web-dev-qa-db-fra.com

PHP La fonction ssh2_connect ne fonctionne pas

Voici mon script: 

    <?php
    $connection = ssh2_connect('XX.XX.XX.XX', 22);
    ssh2_auth_password($connection, 'root', '******');

    $stream = ssh2_exec($connection, 'useradd -d /home/users/test -m testftp');
    $stream = ssh2_exec($connection, 'passwd testftp');
    $stream = ssh2_exec($connection, 'password');
    $stream = ssh2_exec($connection, 'password');
    ?>

Il montre l'erreur suivante: 

Fatal error: Call to undefined function ssh2_connect() in /home/chaosnz/public_html/fotosnap.net/test.php on line 2

Comment puis-je gérer cela?

Merci

28
ravisoni

j'ai installé l'extension SSH2 PECL et tout fonctionne bien, merci à tous pour votre aide ...

17
ravisoni

Honnêtement, je recommanderais d'utiliser phpseclib, une implémentation de pure PHP SSH2 . Exemple:

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>

C'est beaucoup plus portable, plus facile à utiliser et plus complet.

18
neubert

Vous devez installer ssh2 lib

Sudo apt-get install libssh2-php && Sudo /etc/init.d/Apache2 restart

cela devrait être suffisant pour vous mettre sur la route

9
Daniel Acevedo

Si vous utilisez un système Bomebrew sous OSX, j’ai utilisé les éléments suivants pour l’installer:

brew install php56-ssh2

Cela a fonctionné pour moi. Je l'ai tiré de ici . Ubuntu et OSX devraient également utiliser le port Mac.

8
Boni

J'ai résolu ceci sur Ubuntu 16.4 PHP 7.0.27-0 + deb9u et nginx

Sudo apt install php-ssh2 
3
Nanhe Kumar

Pour développer @neubert answer, si vous utilisez Laravel 5 ou similaire, vous pouvez utiliser phpseclib beaucoup plus simplement comme ceci:

Exécuter composer require phpseclib/phpseclib ~2.0

Dans votre contrôleur, ajoutez 

use phpseclib\Net\SSH2;

Puis utilisez-le dans une méthode de contrôleur telle que:

 $Host = config('ssh.Host');
 $username = config('ssh.username');
 $password = config('ssh.password'); 
 $command = 'php version';

 $ssh = new SSH2($Host);
    if (!$ssh->login($username, $password)) {
        $output ='Login Failed';
    }
    else{
        $output = $ssh->exec($command);
 }
1
DelightedD0D

J'exécute CentOS 5.6 car mon environnement de développement et les suivants ont fonctionné pour moi.

su -
pecl install ssh2
echo "extension=ssh2.so" > /etc/php.d/ssh2.ini

/etc/init.d/httpd restart
1
crmpicco