2012-12-27 109 views
24

以下是我的腳本:PHP函數ssh2_connect不工作

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

它顯示了以下錯誤:

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

我該如何面對呢?

感謝

+7

你有什麼試過的?什麼都沒有奏效?你已經做了什麼研究來解決這個問題?你確定安裝並啓用了[SSH2 PECL擴展名](http://php.net/book.ssh2)嗎?它不*是標準PHP的一部分。 – Charles

+1

我已經安裝了SSH2 PECL擴展,它工作正常,謝謝大家的幫助。 – ravisoni

+1

當你可以的時候,你應該把它作爲你的回答並將其標記爲接受。您可能需要稍等一會才能讓系統執行此操作。此操作將幫助未來的用戶解決同樣的問題。 – Charles

回答

16

我已經安裝了SSH2 PECL擴展,它很好,謝謝所有您的幫助老實說工作...

+6

你是如何安裝它的? – ihue

+1

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

18

,我推薦使用phpseclib,一個pure PHP SSH2 implementation。例如:

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

這是一個更便攜,更容易使用和更多功能打包太多。

+0

可能是一些人的一個很好的解決方案,但我需要一些工作,沒有任何額外的安裝。 –

+0

libssh2需要安裝libssh2。 phpseclib只是要求文件位於文件系統的某個地方,但如果你想要認爲這是一個安裝......那麼,我猜你唯一真正的選擇是編寫自己的SSH實現。祝你好運。 – neubert

1

我正在運行CentOS 5.6作爲我的開發環境,下面爲我工作。

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

/etc/init.d/httpd restart 
8

您需要安裝ssh2 lib

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

,應該是足以讓你在路上

+1

'包libssh2-php不可用,但被其他包引用。「如何解決這個問題? – Casper

+0

通過使用替代建議,'sudo apt-get install php-ssh2' – omega1

8

如果運行在OSX上bomebrew,我用下面的安裝它:

brew install php56-ssh2 

那工作爲我而戰。我從here中取出它。還應該有使用mac端口的Ubuntu和OSX。

+1

安裝完成後,我仍然可以調用未定義的函數App \ ssh2_connect() - 你知道爲什麼嗎? – ihue

0

要擴大@neubert答案,如果你正在使用Laravel 5或類似的,你可以使用phpseclib這樣簡單得多:

運行composer require phpseclib/phpseclib ~2.0

在您的控制器添加

use phpseclib\Net\SSH2;

然後在控制器方法中使用它:

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