我正在尝试将 Laravel Flysystem 与 PHP League (league/flysystem-sftp) 的 sftp 适配器一起使用。使用 Laravel 5.4 和 Flysystem 3.7 版本。
当我尝试将文件放置到服务器上时,我收到消息:
无法连接到 someadress.com:22。错误 13. 权限被拒绝
这是代码:
$box = new Filesystem(new SftpAdapter(Config::get('flysystem.connections.sftp')));
$box->put('test.txt', 'bar');
以及配置中的连接详细信息:
'sftp' => [
'driver' => 'sftp',
'host' => 'someadress.com',
'port' => 22,
'username' => 'someuser',
'password' => 'ArndomPa55',
'privateKey' => '/home/user/.ssh/id_rsa',
'root' => '/var/www/html/site/box/',
'timeout' => 20,
],
当我从运行该程序的服务器建立 SSH 连接时,它连接正常,没有密码提示,因此它使用的是私钥。所以不确定为什么这不起作用。
我检查了接收服务器上的
secure日志,里面什么也没有。
ssh2::_privatekey_login
的调用返回 false,导致整个事件失败。如果您的密钥是 openssh(由
-----BEGIN OPENSSH PRIVATE KEY-----
标识为标头),请运行以下命令将其转换为 RSA,从而解决问题。
ssh-keygen -p -m PEM -f [filename here]
local.ERROR: LogicException: Could not login with username: username, host: xx.xx.xx.xx.
在vendor\league lysystem-sftp\src\SftpAdapter中的以下代码我发现hostFingerprint总是返回null。 之后,我刚刚从配置中删除了
privateKey => 'path/to/key'
例如
'sftp' => [
'driver' => 'sftp',
'host' => 'someadress.com',
'port' => 22,
'username' => 'someuser',
'password' => 'ArndomPa55',
//'privateKey' => '/home/user/.ssh/id_rsa',
'root' => '/var/www/html/site/box/',
'timeout' => 20,
]
,我连接到服务器了。我认为它必须与服务器 sftp 配置有关。目前,这适合我测试我的脚本,但我会寻找原因。
我希望这有助于找到永久的解决方案。
我将密钥 chmod 为 600 并将所有权设置为
www-data:www-data
actualuser:www-data