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

use*_*265 6 osx ssh scp

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

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

标准输入:不是 tty

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

我的标准语法如下所示:

从本地主机:

scp -rp ~/Desktop/foldername username@secureremoteserver.com:~/public_html
Run Code Online (Sandbox Code Playgroud)

从远程主机:

scp -rp username@secureremoteserver.com:~/public_html/foldername ~/Desktop/
Run Code Online (Sandbox Code Playgroud)

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

这是怎么回事?

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

roa*_*ima 7

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

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

丑陋的:

stty ... >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

对我有用:

test -n "$PS1" && stty ...
Run Code Online (Sandbox Code Playgroud)

在 SE 其他地方推荐:

# Check for a bash login shell
case $- in
  *i*) stty ... ;;
esac
Run Code Online (Sandbox Code Playgroud)


Mel*_*lan 2

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