【发布时间】:2021-02-03 12:46:26
【问题描述】:
我正在尝试制作一个在终端上运行的 php 脚本,该脚本将通过 ssh 连接到远程服务器并检索文件。这是我目前的代码
#!/usr/bin/php -q
<?php
$cwd = dirname(__FILE__).'/';
$filename = 'retrive-this.file';
$host = 'hostip';
$connection = ssh2_connect($host, 22, array('hostkey'=>'ssh-rsa'));
$methods = ssh2_auth_pubkey_file($connection, 'remoteuser',
$cwd.'ssh/id_rsa.pub',
$cwd.'ssh/id_rsa', "it's an inception");
var_dump($methods);
//ssh2_scp_recv($connection, "/remote/server/path/to/$filename", $cwd.$filename);
?>
现在我遇到了ssh2_auth_pubkey_file() 函数的问题,当我运行脚本时它会返回:
PHP Warning: ssh2_auth_pubkey_file(): Authentication failed for remoteuser using public key in /home/tonyl/Projects/get-file-ssh.php on line 10
bool(false)
密钥文件的权限为-rw-r--r-- (644)。此外,公钥已经添加到远程用户的授权密钥中。我可以正常使用 ssh 命令进行 ssh,所以我认为这不是 ssh 授权问题,但谁知道呢。我是 ssh 和 ssh2 php 库的新手。
如果我在远程 sshd_config 文件中启用它,我可以使用 ssh2_auth_password() 进行连接,但我不想这样做,因为它会降低安全传输。
关于我能做什么的任何想法。
【问题讨论】:
-
默认目录是
.ssh,而不是ssh,这可能是问题所在吗? id_rsa 应该是 0600,由连接的用户拥有。 -
如果这适用于命令行中的 ssh,如果不使用调试器进入 libssh2,这几乎是不可能调试的。您也可以先尝试使用 strace 运行 PHP,看看是否能找到可疑之处。
-
我至少可以确认这是在公钥/私钥文件不存在时得到的确切错误消息。
-
好吧,实际上所有的错误,所以事实上,你是对的,它很难调试。
-
@Wrikken ssh 文件夹在我的脚本文件夹中,我将密钥文件复制到那里以便它可以访问。如果它是一个 apache 网页,我猜运行它的用户会是 www-data,但由于它是一个命令行脚本,我猜用户是我呢?如果是这样的话,我可以访问。我将其更改为 0600 许可证,结果仍然相同。 @Artefacto 我有点害怕它可能会发生这种情况。我将通过跟踪@Wrikken 来查看是否可以获取更多信息。我认为这可能是问题所在,但我在脚本中回显文件的内容并且它可以读取它们。