2012-12-27 18 views
24

Poniżej mój skrypt:PHP funkcja ssh2_connect nie działa

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

To pokazuje następujący błąd:

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

Jak mogę sobie z tym poradzić?

Dzięki

+7

Co próbowaliście? Co nie zadziałało? Jakie badania zostały wykonane, aby rozwiązać ten problem? Czy masz pewność, że [rozszerzenie SSH2 PECL] (http://php.net/book.ssh2) jest zainstalowane i włączone? Jest * nie * częścią standardowego PHP. – Charles

+1

Mam zainstalowane rozszerzenie PECL SSH2 i działa dobrze dziękuję wszystkim za pomoc .. – ravisoni

+1

Kiedy możesz, powinieneś opublikować to jako swoją odpowiedź i oznaczyć ją zaakceptowaną. Być może będziesz musiał trochę poczekać, zanim system pozwoli ci to zrobić. Ta akcja pomoże przyszłym użytkownikom z tym samym problemem. – Charles

Odpowiedz

16

mam zainstalowane rozszerzenia PECL SSH2 i to działa bez zarzutu dzięki wszystkim za pomóc ...

+6

Jak to zainstalowałeś? – ihue

+1

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

18

Szczerze polecam korzystania phpseclib, a pure PHP SSH2 implementation. Przykład:

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

Jest tona bardziej przenośna, łatwiejsza w obsłudze i bardziej funkcjonalna.

+0

Może być dobrym rozwiązaniem dla niektórych osób, ale muszę coś do pracy bez żadnych dodatkowych instalacje. –

+0

libssh2 wymaga zainstalowania libssh2. phpseclib wymaga po prostu, aby pliki znajdowały się gdzieś w systemie plików, ale jeśli chcesz uważać, że jest to instalacja ... cóż, to domyślam się, że jedyną prawdziwą alternatywą dla ciebie jest napisanie własnej implementacji SSH. Powodzenia z tym. – neubert

1

Używam CentOS 5.6 jako środowiska programistycznego i dla mnie działają następujące.

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

/etc/init.d/httpd restart 
8

Musisz zainstalować ssh2 lib

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

że powinno wystarczyć, aby dostać się na drodze

+1

'Pakiet libssh2-php nie jest dostępny, ale jest określany przez inny pakiet." Jak rozwiązać ten problem? – Casper

+0

By usign alternatywa zasugerowała, 'sudo apt-get install php-ssh2' – omega1

8

Jeśli używasz bomebrew na OSX, użyłem następujących czynności, aby zainstalować to:

brew install php56-ssh2 

To wor Ked dla mnie. Wyciągnąłem go z here. Powinny też być Ubuntu i OSX z wykorzystaniem portu mac.

+1

Po zainstalowaniu, nadal otrzymuję' Call to undefined function App \ ssh2_connect() '- Czy wiesz dlaczego? – ihue

0

Aby rozwinąć na @neubert odpowiedź, jeśli używasz laravel 5 lub podobne, można użyć phpseclib znacznie prostsze tak:

Run composer require phpseclib/phpseclib ~2.0

W kontrolerze dodać

use phpseclib\Net\SSH2;

Następnie użyj go w metodzie sterownika, takiej jak:

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