Laravel Flysystem SFTP连接

4
我尝试使用Campbell的Flysystem在同一服务器上跨域保存数据,但是无法使用SFTP使其工作。以下是错误信息:
   Could not login with username: forge

即使我指定了私钥,但它仍然无法工作。这是我的当前设置:
   'sftp'      => [
        'driver'     => 'sftp',
        'host'       => 'xxxx.xxx.xxxx',
        'port'       => 22,
        'username'   => 'forge',
        'password'   => 'xxxxxxxxx',
        'privateKey' => '~/putty/privateKey.ppk',
        'root'       => 'cdn.example.com/public',
        'timeout'    => 10
    ],

我已经安装了

   "league/flysystem-sftp": "~1.0"

我是否错过了使用Flysystem所需的其他设置,或者有更好的方法将上传的文件保存到另一个域?

*更新: 我正在使用Laravel Forge。

谢谢


您能否使用相同的详细信息通过SSH连接到远程主机?看起来这是连接设置的问题,而不是代码本身的问题。 - Anthony
例如,从命令行尝试 ssh -v -i ~/putty/privateKey.ppk forge@xxxx.xxx.xxxx - Anthony
您的PEM文件使用了~简写。PHP运行的用户是否实际上是该目录的用户?如果不是,请尝试将privateKey的值设置为完整路径。 - Anthony
这并不意味着用户是相同的。你尝试过使用完整的解析路径到ppk吗?例如/usr/myusername/putty/privateKey.ppk或者~代表什么? - Anthony
是的,我正在使用C:/Users/Stefen Suhat/.ssh/id_rsa这个全路径,对吗? - ssuhat
显示剩余2条评论
2个回答

1

我遇到了同样的问题。
从我的终端,我可以连接到远程主机。
指定密码或在filesystems.conf中指定privateKey的内容也可以工作,但是将privateKey设置为路径无法使其工作。
经过一些尝试,我最终解决了这个问题。
我的laravel 5.8 filesystems.conf

'sftp' => [
    'driver' => 'sftp',
    'host' => 'HOST',
    'username' => 'LOGIN',
    'privateKey' => base_path() . '/ssh/myPrivateKey',
    'root' => env('MY_PATH'),
    'timeout' => 30,
],

我正在做的愚蠢事情是使用


'privateKey' => 'ssh/myPrivateKey',

相信 Laravel 能够找到它。
用它替换掉。

'privateKey' => base_path() . '/ssh/myPrivateKey',

一切都进行得很顺利 :)

接下来要做的事情是允许您的Apache用户(www-data/nobody/whatever)读取此文件。使用chown命令可以实现。

在进入恐慌模式之前,检查您的密钥是否正确,只需尝试不使用任何代理进行ssh即可。

ssh -o IdentitiesOnly=yes -o IdentityFile=/path/to/my/privateKey LOGIN@HOST

感谢https://superuser.com/a/268777/911570提供的最后一部分内容。

0

它不接受PPK或PEM文件。

您需要将整个密钥放入privateKey字段中。

'sftp' => [
    'driver' => 'sftp',
    'host' => env('SFTP_HOST'),
    'port' => env('SFTP_PORT', 22),
    'username' => env('SFTP_USERNAME'),
    'privateKey' => '-----BEGIN RSA PRIVATE KEY-----
MIIG4gIBAAKCAYEAxXDGR43F1xLoaJBC3hLC5RECX89Ost5rVTBsefj5vnoms8V2
RoUGWIZrzK3v8u+ALcfdcAIRFrFd4XM4KeDUBaRQ6a8hc8qFowF7SMATfVnVjInW
',
    'root' => env('SFTP_ROOT'),
],

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接