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.pub
和id_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命令的主要内容,如果未能解决你的问题,请参考以下文章