2012-12-27 3 views
24

seguito è il mio scritto:funzione PHP ssh2_connect non funziona

<?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'); 
    ?> 

Esso mostra il seguente errore:

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

Come posso fare con questo?

Grazie

+7

Che cosa hai provato? Cosa non ha funzionato? Che ricerca hai fatto per risolvere questo problema? Ti sei assicurato che [l'estensione PECL SSH2] (http://php.net/book.ssh2) sia installata e abilitata? È * non * parte del PHP standard. – Charles

+1

ho installato l'estensione SSH2 PECL e funziona bene grazie a tutti per l'aiuto .. – ravisoni

+1

Quando è possibile, si dovrebbe postare come risposta e contrassegnarlo accettato. Potrebbe essere necessario attendere un po 'prima che il sistema ti consenta di farlo. Questa azione aiuterà gli utenti futuri con lo stesso problema. – Charles

risposta

16

ho installato l'estensione SSH2 PECL e che funziona bene grazie tutti per aiutare ...

+6

Come l'hai installato? – ihue

+1

con questo http://programster.blogspot.ch/2013/06/centos-64-install-ssh2-extension-for-php.html – Agriesean

18

Onestamente, mi consiglia di utilizzare phpseclib, un pure PHP SSH2 implementation. Esempio:

<?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'); 
?> 

È molto più portatile, facile da usare e più ricco di funzionalità.

+0

Potrebbe essere una buona soluzione per alcune persone, ma ho bisogno di qualcosa per funzionare senza ulteriori installazioni. –

+0

libssh2 richiede l'installazione di libssh2. phpseclib richiede solo che i file si trovino da qualche parte nel filesystem, ma se si vuole considerare che si tratta di un'installazione ... beh, quindi, suppongo che l'unica vera alternativa rimasta a voi sia scrivere la propria implementazione SSH. buona fortuna. – neubert

1

Sono in esecuzione CentOS 5.6 come ambiente di sviluppo e di seguito ha funzionato per me.

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

/etc/init.d/httpd restart 
8

È necessario installare ssh2 lib

sudo apt-get install libssh2-php && sudo /etc/init.d/apache2 restart

che dovrebbe essere sufficiente per ottenere sulla strada

+1

'Pacchetto libssh2-php non è disponibile, ma viene chiamato da un altro pacchetto. Come risolvere questo? – Casper

+0

Usign l'alternativa suggerita, 'sudo apt-get install php-ssh2' – omega1

8

Se si esegue un bomebrew su OSX, ho usato il seguente per l'installazione it:

Questo wor per me L'ho estratto da here. Dovrebbero esserci anche Ubuntu e OSX usando anche la porta mac.

+1

Dopo averlo installato, ricevo ancora' Chiama alla funzione non definita App \ ssh2_connect() '- Sai perché? – ihue

0

di espandere @neubert risposta, se si utilizza laravel 5 o simili, è possibile utilizzare phpseclib molto più semplice in questo modo:

Run composer require phpseclib/phpseclib ~2.0

Nel vostro controller aggiungere

use phpseclib\Net\SSH2;

Quindi utilizzarlo in un metodo controller come:

$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); 
}