2012-12-27 90 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); 
}