PHP ssh2_auth_pubkey_file():使用公共密钥验证失败:无效的关键数据,而不是

2019-09-18 01:40发布

在PHP5.3.3(在CentOS和apache2的),我试图通过PHP脚本连接到SFTP。 该代码抓住从构造的按键和服务器的详细信息

function __construct(){
    $this->host     = 'servername.loc';
    $this->port     = SFTP_PORT;
    $this->auth_user    = 'username';
    $this->auth_pub     = '/data/home/username/.ssh/id_rsa.pub';
    $this->auth_priv    = '/data/home/username/.ssh/id_rsa';
    $this->auth_pass    = null;
    $this->connection   = null;
}

并使用这些信息来创建连接。

    private function connect(){
    if (!($this->connection = ssh2_connect($this->host, $this->port))) {
        $this->response  = array('code' => "20",
                                 "message" => "Error connecting to SFTP server.");
        return false;
    }
    if (!ssh2_auth_pubkey_file($this->connection, $this->auth_user, $this->auth_pub,
                                $this->auth_priv, $this->auth_pass)) {
        $this->response  = array('code' => "40",
                                 "message" => "Error authenticating to SFTP server with key.");
        $this->disconnect();
        return false;
    }
}

结果我得到的是在电话会议上的错误ssh2_auth_pubkey_file()

错误是:

“ssh2_auth_pubkey_file():认证使用公钥失败的用户名:无效的关键数据,而不是base64编码

有对键的密码,我可以通过CLI SSH使用这些键来手动连接到服务器。

我难倒。 我需要以某种方式编码的钥匙? 建议?

Answer 1:

你提到的前提条件,即PUBKEY文件不要有任何意见,甚至没有一个换行符是不正确的(和换行符啄荒谬的,当你认为它通过)。

如果您scriptfails,你有概率。 越早跌跌撞撞进入SSH2错误,使得当它被编译wuth libgcrypt代替了OpenSSL SSH2失败。 解决方法是建立在使用OpenSSL PEM格式的私钥文件的格式PEM副本:

~/.ssh> openssl rsa -in id_rsa -out id_rsa.pem

然后,在ssh2_auth_pubkey_file()在你的PHP脚本中,使用id_rsa.pem作为的privKey文件,而不是id_rsa,并且省略了密码。 这应该使它发挥作用。



Answer 2:

那么,它的数字,我找到了答案问这个问题公开后。 与开发注释的另一网站上发现这一点。

d23d23在Gmail的点com:“公共密钥必须是在一行开始的键类型,1个空间和随后KEYDATA(没有新行),而不是随后评论这是libssh2的限制,所以除去任何过量的。与你的密钥生成工具创建后从文件中的数据“。

所以,即使我使用OpenSSL创建私钥和公钥,我不得不编辑把它全部在一行与密钥类型如上所述。 谢谢。



文章来源: PHP ssh2_auth_pubkey_file(): Authentication failed using public key: Invalid key data, not base64 encoded
标签: php ssh