scp 执行请求在通道 0 上失败

scp 执行请求在通道 0 上失败

我尝试将文件从一台计算机 SCP 到另一台计算机,但是我得到了

通道 0 上的执行请求失败”。

但是当我使用 SSH 时,我可以毫无问题地访问机器。如果有帮助的话,我正在使用 Cygwin 中的 SCP 功能。

我在网上搜索时发现提到了“.bashrc”文件,但我找到的唯一文件是“bash.bashrc”。

这是我使用过的命令:

scp /filelocation/file user@hostname:/folderlocation

我也尝试使用 IP 地址代替主机名,但结果相同。

我检查了远程站点是否有SCP命令。

答案1

当我尝试将一些文件发送到我的 Synology NAS 时发生了这种情况。

跑步scp -O有效。

-O选项使用传统的 SCP 协议进行文件传输,而不是 SFTP 协议。

答案2

要查看 .bashrc 文件(以及其他以点开头的文件),您需要执行

ls -a

简单的解决方法是重命名 .profile、.bashrc、.login、.bash_profile 文件,这样它们就不会被包含进去。这些文件被称为 shell 启动文件。

如果您的 scp 现在可以工作,那么答案就在其中一个文件中。

基本上,其中一个 shell 启动文件正在发回输出,这会扰乱正在进行的 ssl 协商。

它可能很简单,只需发送特殊转义序列即可设置窗口标题。另一个罪魁祸首是 stty 命令。

您希望仅在使用以下方式登录时将输出环绕到终端

if tty -s >/dev/null 2>&1; then
    # here if have a real terminal associated to send stty commands 
    # or other special escape sequences to terminal
fi

答案3

我同意频闪灯该错误通常来自 .bashrc(和其他)bash 初始化文件的输出。

不过,有一些 bash 内置的方法可以测试交互式 shell:高级 bash 脚本指南参考,服务器故障参考。

我最常看到的是测试 $PS1 何时进行输出:

if [ "$PS1" ]; then
    echo "some message"
fi

答案4

由于并非所有客户端(或客户端帐户)都支持使用 ssh 来处理登录脚本,因此尝试/使用的有效替代方法是使用 sftp 而不是 scp。

相关内容