当通过 连接到 sftp 时sftp user@serveripaddress
,我通过 检查了文件列表ls
,但远程目录中没有显示任何内容,也尝试过cd
但没有其他可以移动到的路径。
我试过了lls
,这显示了我的项目的目录。
尝试通过远程方式添加目录,mkdir test
但出现错误:
Couldn't create directory: Permission denied
我在本地目录中找到了文件/backups/mall/20180524_mallproducts.csv
所以现在我尝试通过命令测试将文件上传到远程目录,
put backups/client/mall/20180522150444_mallproduct.csv /
这给了我以下结果:
Uploading backups/client/mall/20180522150444_mallproduct.csv to /20180522150444_mallproduct.csv
remote open("/20180522150444_mallproduct.csv"): Permission denied
所以我使用 chmod,但这给了我错误,因为远程目录是空的(没有文件或文件夹):
Couldn't setstat on "/": Permission denied
可能出了什么问题?如何更改 sftp 中的权限?
在 中docker-compose.yml
,这是我的 sftp 设置,
sftp:
image: atmoz/sftp
restart: always
volumes:
- ./data/sftp:/home/foo/upload
ports:
- "2222:22"
command: sftp:pass:48
home
访问 SFTP 时我希望看到文件夹,但目录是空的。
起初我正在访问sudo docker-compose exec sftp bash
,它有/home/foo/upload
一个目录。
但随后我通过访问sftp user@serveripaddress
,发现我的代码正试图上传到这里。
这是通过 sftp 上传的代码:
<?php
namespace Mall\Infra\Transfer;
use phpseclib\Net\SFTP;
class SftpPutTransfer
{
/**
* @var File $name
*/
public function put(string $remote, string $local)
{
$sftp = new SFTP('user', 22);
if (!$sftp->login('user', 'pass')) {
var_dump('failed');
} else {
var_dump('success');
var_dump($sftp->rawlist());
$sftp->put($remote, $local, SFTP::SOURCE_LOCAL_FILE);
}
}
}
我对要连接和测试什么 SFTP 感到困惑。
答案1
根据https://github.com/atmoz/sftp文档,您必须创建至少一个子目录并从那里使用它。