PHP 函数 ssh2_connect 不起作用

问题描述 投票:0回答:11

以下是我的脚本:

    <?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

我该如何处理这个问题?

谢谢

php ssh
11个回答
31
投票

老实说,我建议使用 phpseclib,这是一个纯 PHP SSH2 实现。示例:

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

它更加便携、更易于使用并且功能也更加丰富。


29
投票

我已经安装了 SSH2 PECL 扩展,它工作正常,感谢大家的帮助...


18
投票

我已经在 ubuntu 16.4 PHP 7.0.27-0+deb9u 和 nginx 上解决了这个问题

sudo apt install php-ssh2 

13
投票

您需要安装ssh2 lib

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

这应该足以让你上路


8
投票

如果您在 OSX 上运行 bomebrew,我使用以下命令来安装它:

brew install php56-ssh2

这对我有用。我从这里拉它。应该还有使用 mac 端口的 Ubuntu 和 OSX。


3
投票

我正在运行 CentOS 5.6 作为我的开发环境,以下内容对我有用。

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

/etc/init.d/httpd restart

3
投票

为了扩展 @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);
 }

2
投票

今天

pecl install ssh2
需要旧版本的php(<=6.0). Here https://pecl.php.net/package/ssh2您可以看到支持php7和php8的最新beta版本的ssh2。所以您应该安装其中之一:

pecl install ssh2-1.3.1

* 不要忘记在 php.ini 文件中启用此

ssh2.so
扩展。


2
投票

我知道有答案,但我只是在这里简化答案。

我有同样的问题,我在 ubuntu 20 中使用以下解决方案修复了它:

sudo apt-get install libssh2-1 php7.1-ssh2 -y

您可以根据需要更改 php 版本,例如:

php7.4-ssh2

参考:https://blog.programster.org/ubuntu-16-04-install-php-ssh2-extension


1
投票

适用于 WHM 面板

菜单 > 服务器配置 > 终端:

yum install libssh2-devel -y

菜单 > 软件 > 模块安装程序

  1. PHP PECL 管理点击
  2. ssh2 立即安装点击

菜单 > 重新启动服务 > HTTP 服务器 (Apache)

您确定要重新启动此服务吗?

是的

ssh2_connect() 工作了!


0
投票

我觉得这个已有 11 年历史的讨论值得更新。我从 PHPSecLib 库切换到 PHP 7 和 8 的内置 SSH2 库,因为它似乎连接速度更快并且更标准。现在它还可以使用密钥密码,因此无需再使用第 3 方库。

© www.soinside.com 2019 - 2024. All rights reserved.