【问题标题】:Having trouble using phpseclib to ssh into a server使用 phpseclib SSH 进入服务器时遇到问题
【发布时间】:2025-11-22 07:45:01
【问题描述】:

这是我的upload.php 代码。我所有的文件都在 MAMP 的 htdocs 目录中。我可以转到网址http://localhost:8888/webpage.html,所以我假设 MAMP 正在正常工作。这是我的upload.php 代码。

<?php 
    set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
    include('Net/SFTP.php');
    include('Net/SSH2.php');
    //Send file via sftp to server
    echo "begin";

    echo "now connecting...";

    $connection = ssh2_connect('servername.com', 22); //server redacted
    echo "server made\n";
    ssh2_auth_password($connection, 'username', 'password'); //username and password redacted
    echo "connected successfuly\n";

    echo $ssh->exec('pwd');
    echo $ssh->exec('ls -la');
?>

当我提交表单并被重定向到upload.php 时,upload.php 会显示文字说明

begin now connecting...

所以我假设它没有越界

$connection = ssh2_connect('servername.com', 22); //server redacted

但我不知道为什么。

我正在使用 Mac。我可以通过终端使用ssh username@servername.comscp ./filename.txt username@servername.com:~/test/ ssh 到服务器和scp 文件。显然它会提示我输入密码。

也许我有错误的服务器名称?有谁知道为什么它没有超过那条线?

【问题讨论】:

    标签: php ssh phpseclib


    【解决方案1】:

    就像您在混合使用 phpseclib API 和 libssh2 API。就像 $ssh 变量在哪里被定义?您将 ssh2_connect 的结果设置为 $connection 但后来使用从未定义过的 $ssh。

    不管怎样,试试这个:

    <?php 
        set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
        include('Net/SFTP.php');
        include('Net/SSH2.php');
        //Send file via sftp to server
        echo "begin";
    
        echo "now connecting...";
    
        $ssh = new Net_SSH2('servername.com', 22); //server redacted
        echo "server made\n";
        $ssh->login('username', 'password'); //username and password redacted
        echo "connected successfuly\n";
    
        echo $ssh->exec('pwd');
        echo $ssh->exec('ls -la');
    ?>
    

    【讨论】:

    • 是的,我一直在复制和粘贴来自不同来源的代码,但没有任何效果。而且我的代码没有到达$ssh 变量,所以我还不担心它。事实证明,我需要而不是 . 'phpseclib' 我需要包含安装它的整个目录路径。奇怪的是,它不允许我包含多个内容。我可以包括'Net/SFTP.php''Net/SSH2.php',但不能同时包括两者。谢谢。