我正在尝试将scp
文件从服务器传输到本地计算机,但是出现了以下错误:
protocol error: unexpected <newline>
这是我的语法:
scp user@server:/path/to/file .
它在此服务器上不起作用,但后来我在我的另一台服务器上尝试了相同的命令,所以我只能假设这是我的服务器的问题而不是命令的语法的问题scp
。
有任何想法吗?
答案1
您的某个登录脚本 (.bashrc/.cshrc/etc.) 不该向终端输出数据,而向终端输出数据。这导致 scp 在连接并准备复制时出错,因为它开始接收它不期望的额外数据。删除此处生成的输出。
您可以在 bashrc 中使用以下代码来检查您的终端是否是交互式的并且仅输出文本。其他 shell 也存在等效的东西:
if shopt -q login_shell; then
[any code that outputs text here]
fi
答案2
找到解决方案了。我的 .bashrc 文件和 .bash_logout 设置为每当我登录/退出时向我回显信息。显然,回显的新行给 scp 带来了一些问题。我注释掉了我的 echo 语句,这招奏效了!
答案3
我遇到了类似的问题。原因正是如此:我的 .bashrc 中有一个“echo “some text” ”命令,用于打印代理的状态。而这个“echo “some text” ”导致 scp 失败。因此,通过删除 .bashrc 文件中的“echo”,我可以使用 scp 传输文件。