12

我正在尝试使用 PHP 的 ssh2 函数连接到另一台机器。我知道 ssh 密钥是在没有密码的情况下创建的并且分布正确,我可以ssh user@host在我机器上的终端中连接到服务器。

PHP 函数尝试使用 ssh 密钥文件连接到 IP 地址:-

 function minnerConnect($miner_serial) {

    $port = '7822';
    $miner_ip = $this->getMinerIp($miner_serial);

    $methods = array(
        'kex' => 'diffie-hellman-group1-sha1',
        'hostkey' => 'ssh-dss',
        'client_to_server' => array(
            'crypt' => '3des-cbc',
            'mac' => 'hmac-md5',
            'comp' => 'none'),
        'server_to_client' => array(
            'crypt' => '3des-cbc',
            'mac' => 'hmac-md5',
            'comp' => 'none'));
    $connection = ssh2_connect($miner_ip, $port, $methods);
    if (ssh2_auth_pubkey_file($connection, 'root',
        '/root/.ssh/id_dsa.pub',
        '/root/.ssh/id_dsa','')) {
      echo "Public Key Authentication Successful\n";
    } else {
      echo "Public Key Authentication Failed";
    }

但显示的错误是:-

(!)警告:ssh2_auth_pubkey_file():使用公钥的root身份验证失败:回调在第95行的/var/www/application/models/miner_model.php中返回错误

第 95 行是'/root/.ssh/id_dsa','')) {.

有人可以建议修复吗?

4

1 回答 1

12

这种情况下的错误是密钥是由 root 用户生成的,但它们需要由 web 服务器 group/owner 访问www-data

www-data我不喜欢将ssh 密钥保存在/home/keyuser/www-data. 身份验证成功。

即使最初的错误是说它找到了文件,它也无法读取文件。

更好的调试方法是尝试通过 php 读取文件:

$prv_key = file_get_contents('/var/www/application/files/id_dsa');
print "<pre>";
var_export($prv_key);
print "</pre>";
于 2014-05-27T11:15:02.260 回答