gpt4 book ai didi

PHP ssh2_auth_pubkey_file() : Authentication failed using public key: Invalid key data, 不是 base64 编码

转载 作者:可可西里 更新时间:2023-11-01 13:47:54 26 4
gpt4 key购买 nike

在 PHP5.3.3 中(在 CentOS 和 apache2 上)我试图通过 php 脚本连接到 SFTP。代码从构造函数中获取 key 和服务器详细信息

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(): Authentication failed for USERNAME using public key: Invalid key data, not base64 encoded"

key 上没有密码,我可以使用这些 key 通过 CLI ssh 手动连接到服务器。

我被难住了。我需要以某种方式对 key 进行编码吗?有什么建议吗?

最佳答案

您提到的先决条件,即公钥文件没有任何注释,甚至没有尾随换行符是不正确的(当您仔细考虑换行符时,换行符很荒谬)。

如果您的脚本失败,则说明您有问题。很快就偶然发现了 ssh2 错误,该错误使 ssh2 在使用 libgcrypt 而不是 openssl 编译时失败。解决方法是使用 openssl 创建 PEM 格式的私钥文件的 PEM 格式副本:

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

然后,在您的 PHP 脚本的 ssh2_auth_pubkey_file() 中,使用 id_rsa.pem 作为私钥文件而不是 id_rsa,并省略密码。这应该使它起作用。

关于PHP ssh2_auth_pubkey_file() : Authentication failed using public key: Invalid key data, 不是 base64 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11007090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com