我使用sftp和公共密钥为非root用户发送文件,看起来像是发送文件,但我无法在目标文件夹中找到它,可能是由于权限。
sftp> ls
sftp> put /tmp/testx
Uploading /tmp/testx to /folder1/target_folder
/tmp/testx 100% 5 0.0KB/s 00:01
sftp> get testx
Couldn't stat remote file: No such file or directory
File "/folder1/target_folder/testx" not found.
sftp> ls
sftp>
这是-vvv:
debug3: SSH_FXP_REALPATH . -> /folder1
debug3: Looking up /tmp/file_to_send
debug3: Sent message sender_host 4 T:17 I:2
debug3: Wrote 80 bytes for a total of 2653
debug3: Received stat reply T:105 I:2
debug3: Sent message SSH2_FXP_OPEN I:3 P:/folder1/target_directory/file_to_send
debug3: Wrote 112 bytes for a total of 2765
debug3: Sent message SSH2_FXP_WRITE I:4 O:0 S:6206
debug3: Wrote 6288 bytes for a total of 9053
debug3: SSH2_FXP_STATUS 0
目标目录
drw-rw-rw- 1 0 0 target_directory
如何在没有服务器访问的情况下确保文件已交付?
答案 0 :(得分:6)
您可以做的就是在上传文件时检查没有错误。这是SFTP服务器为您提供的所有信息。
使用命令行OpenSSH sftp
客户端,您可以检查其退出代码。
echo "put file.txt" | sftp -b - user@host
if [ $? -eq 0 ]
then
echo "File uploaded"
else
echo "File NOT uploaded"
fi
完全有可能SFTP服务器不允许您下载刚刚上传的文件。
这种行为有两个常见原因:
答案 1 :(得分:1)
对于完全任意的服务器实现,这是不可能的。通常希望将传入目录设置为只写不受信任的用户,以防止滥用公共(或其他广泛)可访问的文件服务器(例如使用它们来托管不相关的内容;曾几何时,海盗经常使用盗取凭据的FTP服务器 - 防止上载的内容在没有管理审查的情况下被下载阻止了这种情况。因此:如果服务器管理员选择不让您看到上传的文件,那么,您就看不到上传的文件了。
然而 - SFTP协议提供了一个契约:如果你在写入后告诉服务器关闭句柄,并且服务器说所有涉及的操作都成功而没有错误,那么如果文件没有成功接收(无论如何)然后服务器决定使用它,这可能包括或不包括使其可供下载访问),这表示服务器端错误,并不是您的SFTP客户端的错误。
当我上次实施自定义SFTP服务器时 - 出于客户支持目的,使用Paramiko实施 - 我在成功上传后发送了电子邮件通知;显然,这是一种特定于实现的行为。)
答案 2 :(得分:1)
我知道这是一个老线程...... 这是我能够使用openssh sftp客户端将密码身份验证上传到盲文件夹中的最佳方法。 (ftp更精确......)
{{1}}