使用SSH -T在远程主机上执行脚本时出现“未设置TERM环境变量”错误

时间:2019-05-15 12:38:09

标签: ssh environment-variables tty xterm term

“ bash_script.sh”调用“ other_bash_script.sh”并通过SSH在远程服务器上运行时,收到“未设置TERM环境变量”错误。

TERM environment variable not set

我检查了本地和远程服务器上是否设置了TERM变量:

set | grep TERM TERM=xterm-256color

我在两个脚本的“ Shebang”行的末尾都使用了-p标志,但是由于无法解析,因此我将其删除。

我也做了

export TERM=xterm

bash_script.sh的第二行没有变化,并且在“ other_bash_script.sh”中执行了相同的操作,导致了不同的错误:

top: failed tty get

我删除了该行,因为它无法解决任何问题

我从这两个流行的stackoverflow答案中使用了建议,但没有帮助;

TERM environment variable not set

how to remove "TERM environment variable not set"

这是'bash_script.sh'的内容

ssh -T user@lab < other_bash_script.sh

“ other_bash_script.sh”的输出已成功打印到屏幕上,但是无论哪种情况,我仍然得到: '''未设置TERM环境变量'''

3 个答案:

答案 0 :(得分:1)

对于 Nagios XI 用户...

在我将“clear”命令添加到我作为 Nagios 插件创建的 bash 脚本后,我得到了未设置的 TERM 环境变量。我只在 Nagios XI Web UI 中看到了错误。在 Linux 命令行上运行,我没有收到错误消息。删除“清除”消除了错误。

史蒂夫

答案 1 :(得分:0)

您为什么要使用ssh -T?这将禁用pty的分配。如果您尝试运行top之类的命令,则会导致它们失败,因为不会出现pty / tty。非交互式ssh会话也不会将TERM传递给远程系统,这就是为什么您会收到“未设置TERM环境变量”错误的原因。您还声称已确认在远程系统上设置了TERM,但仅向我们表明已确认在本地系统上设置了ssh -t

解决方案是执行Array.push来强制分配pty,即使对于非交互式ssh会话也是如此。

答案 2 :(得分:0)

stderr 重定向到 / dev / null /

2>/dev/null

例如 ssh -T user @ lab / dev / null

如果脚本不是交互式的,则不需要终端。如果脚本正确退出,则错误不需要得到修复或抑制,但是将stderr重定向到/ dev / null即可。

使用SSH -t选项强制终端可能不起作用。除了原始错误外,我还得到:

  

因为stdin不是终端,所以不会分配伪终端

使用SSH -t -t(Multiple -t)强制终端删除了错误情况,因此,该错误消息却导致终端垃圾。

非常感谢Kurtis Rader,他的回答Why are you using ssh -T? ...不适用于我,但促使我继续寻找解决方案,并提供了有关使用以下信息的进一步信息:

  

-T,-t和多个-t标志

在以下StackOverflow帖子Pseudo-terminal will not be allocated because stdin is not a terminal中,以及在serverfault.com帖子What is the benefit of not allocating a terminal in ssh?