具有公钥的SFTP失败而没有错误

时间:2016-09-20 14:24:03

标签: php sftp ssh2-sftp

我正在使用SSH-DSS密钥,端口为2222。我可以使用公钥/私钥(peagent)和用户名从我的机器通过winscp连接。 (私钥没有密码)

但是当我尝试使用PHP脚本时,它不起作用。没有错误消息。 ssh2_auth_pubkey_file()会返回blank / false。所以脚本最终以

结束
  

公钥验证失败

有没有调试错误的方法?

使用puttygen生成公钥/私钥。

以下是我正在使用的代码段:

    $methods = array('hostkey' => 'ssh-dss');

    $connection = ssh2_connect('sftp.hostname.com', 2222, $methods);
    if (!$connection) die('Connection failed');

    $publicKeyPath = "./pubKey-OpenSSH";
    $privateKeyPath = "./priKey.ppk";
    echo file_get_contents($publicKeyPath);
    echo "<hr />";
    echo file_get_contents($privateKeyPath);
    echo "<hr />";

    if(ssh2_auth_pubkey_file($connection, 'USERNAME', $publicKeyPath, $privateKeyPath, ""))
    {
        echo "<br /><br /><b>Public Key Authentication Successful</b>\n";
    }
    else
    {
        print_r($connection);
        die('<br /><br />Public Key Authentication Failed');
    }

2 个答案:

答案 0 :(得分:0)

如果您具有服务器的root访问权限,则可以停止ssh守护程序并以

开头
ssdh -ddd

进行调试,并注意那里的错误。

答案 1 :(得分:0)

私钥是ppk。需要成为与ssh2_auth_pubkey_file合作的人。您可以使用puttygen将密钥转换为适当的格式,方法是转到转化 - &gt;导出OpenSSH密钥