rz执行后无弹窗且不报错,本质是终端不支持或未启用ZModem协议:PuTTY默认不支持,Xshell需“文件→传输→ZModem”,SecureCRT需“Options→Session Options→File Transfer→ZModem”,跳板机或小窗口尺寸也会导致静默失败。

rz/sz 命令本身不需要“配置”,但必须满足三个前提才能用:Linux 端装了 lrzsz、终端软件支持 ZModem 协议、当前会话未被禁用传输功能。缺一不可,否则会卡在命令无响应或报 rz: command not found。
为什么 rz 执行后没弹窗、也没报错?
这是最常被误判为“命令坏了”的情况,实际是终端不支持 ZModem 协议或协议被关闭:
- Putty 默认完全不支持 ZModem,
rz输入后只会光标闪烁、无任何反应 - Xshell / SecureCRT / MobaXterm 需在会话设置里显式启用 ZModem:Xshell 是
文件 → 传输 → ZModem;SecureCRT 是Options → Session Options → File Transfer → ZModem - 某些 SSH 代理(如 jump server)或容器内 shell 会拦截控制字符,导致 ZModem 握手失败,此时
rz会卡住几秒后退回提示符,看似“执行完了”,实则没传任何东西 - 终端窗口尺寸过小(比如只有 20 列宽)也可能触发协议协商失败,尝试放大窗口再试
rz -b 和 rz 不加参数的区别在哪?
默认的 rz 是 ASCII 模式,会把换行符 \r\n(Windows 风格)转成 \n(Unix 风格),同时过滤掉部分控制字符 —— 这对文本文件没问题,但对二进制文件(如 .zip、.pdf、.so)会导致损坏。
必须用 rz -b 强制二进制模式,逐字节原样传输:
-
rz→ 文本安全,但可能改写内容 -
rz -b→ 二进制安全,推荐作为默认用法 -
rz -be在-b基础上额外转义所有控制字符,适合极少数终端兼容性差的场景,一般不用
sz 下载的文件存在哪?
sz 不决定保存位置,由你本地终端软件弹出的“另存为”对话框决定。但有几点关键细节:
- Xshell 默认保存到
%USERPROFILE%\Documents\Xshell Downloads\(Windows) - SecureCRT 可在
Options → Session Options → File Transfer → Default directory中预设下载路径 - MobaXterm 会记住上次保存目录,但不会自动创建子目录,如果选了不存在的路径(如
/tmp/abc/123),它只保存到/tmp,且不报错 - 如果终端弹窗被系统拦截(如 Windows 安全中心阻止)、或运行在无图形界面的纯 SSH 环境(例如通过
ssh -t连进 Docker 容器),sz会直接失败并输出类似*** ERROR *** unable to open ZMODEM session
真正容易被忽略的是:ZModem 协议依赖终端双向控制字符交互,一旦中间链路(比如跳板机、防火墙、串口转接器)做了字符过滤或流控干预,rz/sz 就会静默失效。这时候别折腾参数,直接切 scp 或 sftp 更省时间。


















