AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 652629
Accepted
surj
surj
Asked: 2014-12-16 02:42:11 +0800 CST2014-12-16 02:42:11 +0800 CST 2014-12-16 02:42:11 +0800 CST

如何使用 OpenSSH SFTP 服务器检测或记录中断的上传?

  • 772

我有这个问题,我们的客户一直在 SFTP-ing 截断数据。我不确定问题出在我们这边还是他那边。我启用了 SFTP 日志记录,但它不允许我检测上传是否被中断。

例如,如果我启动 sftp 客户端,然后^C在上传过程中点击,服务器只会说类似 的close "/data/README.md" bytes read 0 written 5366内容,这与不间断上传无法区分。

我.part想像前缀这样的东西会起作用,但是通过查看有关服务器故障的其他帖子,我认为 OpenSSH 的 sftp 服务器不可能。

那么,有没有办法让我检测文件上传是否被中断?

ssh
  • 1 1 个回答
  • 2172 Views

1 个回答

  • Voted
  1. Best Answer
    Martin Prikryl
    2014-12-16T03:21:36+08:002014-12-16T03:21:36+08:00

    我假设“sftp 客户端”指的是 OpenSSH SFTP 客户端。“问题”是当您按下 时Ctrl+C,它会停止上传并干净地关闭远程文件,就像上传完全完成一样(注意这是正确的行为,许多其他 SFTP 客户端的行为相同)。所以服务器绝对没有办法告诉上传被中断了。


    严格来说它有,因为 OpenSSH 客户端在创建文件时会向服务器发送大小提示。但是 OpenSSH 服务器不使用也不记录这些信息。尽管修改其代码以记录大小会非常简单,但如果您愿意的话。

    见:process_open_sftp-server.c

    a = get_attrib();
    flags = flags_from_portable(pflags);
    mode = (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) ? a->perm : 0666;
    logit("open \"%s\" flags %s mode 0%o",
        name, string_from_portable(pflags), mode);
    

    logit将语句更改为:

    logit("open \"%s\" flags %s mode 0%o size %llu",
        name, string_from_portable(pflags), mode, (unsigned long long)a->size);
    

    请注意,发送尺寸提示是可选的。虽然有些 SFTP 客户端会发送它(例如 OpenSSH 或 WinSCP),但有些不会(例如 PSFTP、FileZilla 或 LFTP)。在这种情况下,您将在a->size.


    如果客户端真的中止了上传(没有完全关闭远程文件,例如何时sftp被杀死),您将能够将其从“强制”前缀告诉“关闭”记录:

    强制关闭“/data/README.md”字节读取 0 写入 5366

    • 9

相关问题

  • 如何最好地设置 ssh 隧道以访问远程网络 (Linux)

  • SSH 和重定向

  • 通过 SSH 会话使用 NET USER 命令拒绝访问

  • SSH 服务器零日漏洞利用 - 保护自己的建议

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve