是否有使用用户、密码和私钥/公钥来验证 SFTP 的 PHP 库? [关闭]

Posted

技术标签:

【中文标题】是否有使用用户、密码和私钥/公钥来验证 SFTP 的 PHP 库? [关闭]【英文标题】:Is there a PHP library to auth SFTP using user, password AND private/public key? [closed] 【发布时间】:2022-01-22 09:33:20 【问题描述】:

我尝试了https://sourceforge.net/projects/phpseclib/,但没有成功。 所以如果有人知道其他方法,我会很高兴

在 cmd 上使用此命令可以连接,但我希望它在 PHP 上:

sshpass -p 密码 sftp -c aes128-cbc -i ~/dir_to_id_rsa.ppk -P 2222 user@host

PHP 5.6.3

【问题讨论】:

【参考方案1】:

我建议您使用 phpseclib v3,它可通过 Composer 安装并适用于 PHP 5.6。示例:

<?php
require __DIR__ . '/vendor/autoload.php';

use phpseclib3\Net\SSH2;
use phpseclib3\Crypt\PublicKeyLoader;

$key = PublicKeyLoader::load(file_get_contents('privatekey'));

$ssh = new SSH2('localhost');
if (!$ssh->login('username', 'password', $key)) 
    throw new \Exception('Login failed');

如果您使用的是 phpseclib v1,那么除非您使用的是最新的 git 版本的 phpseclib,否则您拥有相关密钥和密码的顺序。

无论如何,我会说发布您的 phpseclib 代码,我可以帮助您。

【讨论】:

感谢您的回复。我使用composer尝试了v3:1.我运行了这个命令:composer require phpseclib/phpseclib:~3.0 2.然后安装成功。 3. 执行您的代码时,我得到以下信息:警告:不支持在第 2 行的 /var/www/html/vendor/paragonie/constant_time_encoding/src/Base64.php 中声明 'strict_types' 解析错误:语法错误,意外': ',期待';'或第 45 行 /var/www/html/vendor/paragonie/constant_time_encoding/src/Base64.php 中的 '' 我正在使用 composer 1 来安装它(已弃用),应该有问题吗? @LeonardoSoares - 我的猜测是您使用更新版本的 PHP 执行了composer install,然后您的 Web 服务器正在运行。 phpseclib.com/docs/install 更详细地讨论了这个一般策略。也就是说,github.com/phpseclib/phpseclib/releases/download/3.0.12/… 刚刚添加到 phpseclib 3.0.12 版本中。试试看,看看它是否适合你。请务必在文件顶部输入require __DIR__ . '/vendor/autoload.php';

以上是关于是否有使用用户、密码和私钥/公钥来验证 SFTP 的 PHP 库? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

公钥和私钥浅析

windows环境下 生成git公钥和私钥

非对称加密中的公钥和私钥怎么来的

请问SSL加密的公钥和私钥区别

使用sshpass 和 ssh-copy-id批量拷贝公钥到远程主机

关于RSA中公钥和私钥的具体使用情况区分