PHP多个SFTP命令

Posted

技术标签:

【中文标题】PHP多个SFTP命令【英文标题】:PHP multiple SFTP Command 【发布时间】:2022-01-09 13:29:34 【问题描述】:

我的数据供应商仅提供用于下载文件的 sftp 连接。 SFTP 的身份验证是使用正确设置的 SSH-RSA 私钥/公钥完成的。 我已经使用 SSH 使用以下 2 个命令成功下载了文件

sftp -o PORT=6010 JJEE@XX.160.XX.XX
Connected to JJEE@XX.160.XX.XX
sftp> get /BACKUP/01December2021.zip

现在为了自动化,我想使用 php 并尝试了 2 种方法。

方法一

<?php
if (!function_exists("ssh2_connect")) 
    die("function ssh2_connect doesn't exist");

$connection = ssh2_connect("XX.160.XX.XX","6010",array('hostkey'=>'ssh-rsa'),array());
$connect=ssh2_auth_pubkey_file($connection,'JJEE','/location/id_rsa.pub','/location/id_rsa','');

if ($connect)
    echo "\n Public Key Authentication Successful <br/>";
else
    echo "\n Public Key Authentication failed <br/>";
?>

这是一个简单的脚本,失败并出现 Public Key Authentication failed 错误和 PHP 警告 PHP Warning: ssh2_auth_pubkey_file(): Authentication failed for JPL_EOD using public key。我可以确认我的id_rsa.pubid_rsa 权限是正确的。

由于我的供应商只向我提供了 sftp 详细信息,我认为我无法通过 ssh2_connect 创建 ssh 连接。

我发现了很多关于 phpseclib 的建议,但我不想仅将 3rd 方库用于 2 行代码。 我决定使用下面的第二种方法。

方法 2

<?php
passthru('sftp -o PORT=6010 JJEE@XX.160.XX.XX && get /BACKUP/01December2021.zip');
?>

从终端打开时

php /location-to-script/method-2.php

我可以看到 Connected to JJEE@XX.160.XX.XX 显示,但是我认为第二个命令是 ssh 命令而不是 sftp 命令,因此它失败了!

我的怀疑是

    登录后如何将第二条命令作为 sftp 命令发送以下载文件 如果需要,如何连续发送多个 sftp 命令 还有其他更好的建议吗?

提前谢谢你。

【问题讨论】:

“由于我的供应商只向我提供了 sftp 详细信息,我认为我无法通过 ssh2_connect 创建 ssh 连接。” – SFTP 是一个 SSH 子系统。 SFTP 下始终存在 SSH 连接。您确定ssh2_auth_pubkey_file 没有发出任何 PHP 错误/警告/提示吗? + 请发布一致的示例。您的sftp 代码显示JJEE,而您的PHP 代码显示my-server-user 已编辑错误详情。我确实了解SFTP 下总是有一个 SSH 连接,但是我的供应商回复了如下声明:根据我们的内部政策,不允许使用 ssh,这就是我切换到第二个的原因方法 这是一个常见的误解。他们肯定意味着“不允许ssh shell访问。如果不允许 SSH,SFTP 也不会。换句话说,如果 OpenSSH sftp 有效,那么 PHP ssh2_connect 也必须有效(除了一些不兼容或版本问题)。 + sftp -vvv -o PORT=6010 JJEE@XX.160.XX.XX 的后输出 + 顺便说一句,ssh2_connect 的端口参数应该是整数,而不是字符串(尽管它可能不是问题)。 【参考方案1】:

我终于可以下载 1 行语法,这是我以前不知道的,因为密钥对登录不需要任何密码!

终于用上了

passthru('sftp -o PORT=6010 JJEE@XX.160.XX.XX:/BACKUP/01December2021.zip',$result);

这不是一个确切的答案,但它确实暂时解决了问题。

【讨论】:

以上是关于PHP多个SFTP命令的主要内容,如果未能解决你的问题,请参考以下文章

sftp

linux下如何使用sftp命令

Linux基础命令 sftp命令的使用

Linux命令之sftp - 安全文件传输命令行工具

linux下如何使用sftp命令

Linux系统中使用lftp命令实现FTP上传下载