SSH TERM 检测

SSH TERM 检测

我的 ssh 配置文件已接受环境设置为:

AcceptEnv LANG LC_*

我有点困惑,为什么当我通过某些客户端 ssh 时,我的 TERM 变量被设置为 xterm256-color,而其他客户端 TERM 被设置为 vt100。我的 .bashrc 和 /etc/profile 没有任何设置 TERM 变量的内容。

答案1

$TERM是特殊的——它不是作为环境变量发送的(这对于非 Unix 系统来说毫无意义),而是在建立伪终端通道时作为特殊的“终端类型”字段发送。RFC 4254§6.2

6.2 请求伪终端

可以通过发送以下消息为会话分配伪终端。

byte      SSH_MSG_CHANNEL_REQUEST
uint32    recipient channel
string    "pty-req"
boolean   want_reply
string    TERM environment variable value (e.g., vt100)
uint32    terminal width, characters (e.g., 80)
uint32    terminal height, rows (e.g., 24)
uint32    terminal width, pixels (e.g., 640)
uint32    terminal height, pixels (e.g., 480)
string    encoded terminal modes

答案2

$TERM终端,也就是你正在运行的 shell 的父进程本地。应用程序使用它来确定终端的功能,例如它是否支持彩色。将其转发到您连接的任何其他主机非常有用,因为否则他们将失去有关最终用户终端功能的这一知识。

例如防止 SSH 客户端将 TERM 环境变量传递给服务器?

相关内容