进一步阅读

进一步阅读

我正在尝试使用 scp 从网络中的另一台计算机复制一个小文件,该计算机运行的是 Linux Mint 18.3。

我在 macOS 上尝试了一下,得到了这个:

$ scp [email protected]:/home/fyde/Downloads/notes/ubuntu.txt .                          
[email protected]'s password:
\033]4;0;#2b1229\033\\033]4;1;#FFD36D\033\\033]4;2;#6559B6\033\\033]4;3;#E1549E\033\\033]4;4;#788FA3\033\\033]4;5;#778BE1\033\\033]4;6;#D88AA7\033\\033]4;7;#d2d8d2\033\\033]4;8;#939793\033\\033]4;9;#FFD36D\033\\033]4;10;#6559B6\033\\033]4;11;#E1549E\033\\033]4;12;#788FA3\033\\033]4;13;#778BE1\033\\033]4;14;#D88AA7\033\\033]4;15;#d2d8d2\033\\033]10;#d2d8d2\033\\033]11;#2b1229\033\\033]12;#FFD36D\033\\033]13;#d2d8d2\033\\033[s\033[1000H\033[8m\033]708;#2b1229\033\\033[u\033]13;#d2d8d2\033\C0644 6743 ubuntu.txt

我在 Ubuntu 机器上尝试过,得到了类似的结果:

$ scp [email protected]:/home/fyde/Downloads/notes/ubuntu.txt .
[email protected]'s password:
C0644 6743 ubuntu.txt

我尝试使用不同的文件,得到相同的结果,从其他计算机复​​制工作正常。

有人知道发生了什么事吗?

答案1

您已经搞砸了登录 shell 的启动脚本,这就是“bambozling” scp

scp正在开始一个非交互式SSH 会话并调用非交互式登录外壳没有一个控制终端。但是你的 shell 的启动脚本没有正确检查这种情况,并且正在执行它们所做的事情交互的调用 shell一个控制终端。事实上,那些贝壳是愉快而错误地假设该终端是特定类型的终端。

所有这些神秘的输出都是 shell 启动脚本中命令输出各种 OSC 控制序列(␛[并且␛/是 OSC 和 ST 控制字符的 ECMA-48 7 位别名)和 CSI 控制序列(␛]是 ECMA-48 7 -CSI 控制字符的位别名)。这些序列试图更改颜色映射并影响终端回滚。它们仅适用于特定的终端模拟器。

但是 SSH 连接的本地端并不是将所有这些镜像到本地终端(考虑到您使用的是 MacOS,它不太可能是特定的终端模拟器,更可能是 iTerm2 之类的东西,无论如何) )。本地scp程序期望通过 SSH 连接与专用协议进行通信,从而实现文件复制机制。 shell 的启动脚本错误地吐出的所有垃圾即使在非交互模式下,正在使其通讯混乱。

将有问题的 shell 启动脚本更正为不是当非交互式调用或没有控制终端时尝试执行终端操作。

进一步阅读

相关内容