传输文件 SSH SCP 错误消息:“Stdin:不是 tty”

传输文件 SSH SCP 错误消息:“Stdin:不是 tty”

我正在使用 Macbook SSH 终端并生成 RSA 密钥对并id_rsa.pub以批准的权限远程上传。我可以连接远程 Apache Web 服务器。我可以创建、打开、移动、修改,初步检查可以管理网络服务器上的文件,没有问题......并且不会生成错误消息。

令人惊讶的是,我无法将scp文件夹或文档从桌面传输到远程服务器。我也无法将scp文件夹或文档从远程服务器传输到我的桌面。每次我收到错误消息:

stdin: 不是 tty

发送至远程 Web 服务器或来自远程 Web 服务器的命令scp不适用于绝对或相对文件位置引用。

我的标准语法如下所示:

来自本地主机:

scp -rp ~/Desktop/foldername [email protected]:~/public_html

从远程主机:

scp -rp [email protected]:~/public_html/foldername ~/Desktop/

这似乎是错误消息的问题stdin: is not a tty

这是怎么回事?

如果此错误阻止文件传输,我该如何解决stdin: is not a tty

答案1

原因是目标服务器上的登录脚本之一用于stty...设置终端特征。当该命令没有 tty 时,即当您使用 进行连接时,该命令将失败scp

解决方案是保护 ,stty使其仅在存在交互式会话时运行。有多种方法可以做到这一点;以下是 bash/sh 类型 shell 的一些示例:

丑陋的:

stty ... >/dev/null 2>&1

对我有用:

test -n "$PS1" && stty ...

受到推崇的SE 上的其他地方:

# Check for a bash login shell
case $- in
  *i*) stty ... ;;
esac

答案2

我不确定这对 OSX sshd 实现是否重要,但在某些系统上,当您没有 tty 时,带有 ~/ 约定的隐含主目录可能不会扩展,并且您可能会得到一些意外的结果。我知道这不是确定的事情,但请尝试使用完整路径名,而不是 ~/ 构造。

答案3

当我的 .bash_profile 尝试加载时,就会发生这种情况。我添加了

[ -z "${PS1}" ] && 返回;

在顶部,它修复了它

相关内容