除了 SSH_ORIGINAL_COMMAND 之外,ssh 会话期间还存在哪些其他环境变量? 有没有一份明确的清单?
答案1
尝试运行env
(或set
) 并获取完整列表?如果您想要 SSH 特定的列表,则需要为您的ssh
和sshd
提供商指定供应商(最好是平台,至少是主版本号)。
答案2
我整理了一份 OpenSSH v8.8 使用的 shell 环境变量名列表。有关答案,请参阅下面的 SSH 转发部分。
OpenSSH(8.8p1)中使用的环境变量作为静态getenv(3)
函数的参考,并由我的代码审查进行补充。
SSH 会话转发器
对于 OpenSSH 会话转发器,环境变量列表如下:
DISPLAY
,当前桌面会话的默认主机/显示号/和屏幕,字符串,channels.c
mux.c
readpass.c
readpass.c
ssh.c
HOME
、密码数据库指定的用户主目录的路径、filepath、sshconnect.c
LOGIN
,UNIX 用户名;仅在 IBM AIX 上使用,字符串,session.c
LOGNAME
, USER 的同义词;设置以与使用此变量的系统兼容。, 字符串,session.c
KRB5CCNAME
, MIT Kerberos 5 会话名称;仅在 KRB5 环境中使用,字符串;通常与 Windows Active Directory 一起使用,session.c
MAIL
, 设置为 UNIX Maildir 系统的用户本地收件箱的文件路径、文件路径或目录路径,session.c
PATH
、可执行程序所在的目录集、文件路径列表、session.c
SSH_CLIENT
,(已弃用)SSH 客户端连接套接字信息;由 sshd(8) 守护进程设置,字符串,session.c
SSH_CONNECTION
, 标识连接的客户端和服务器端。该变量包含四个空格分隔的值:客户端 IP 地址和客户端端口号以及服务器 IP 地址和服务器端口号。SSH 客户端和服务器套接字连接信息;由 sshd(8) 守护进程设置,字符串,session.c
SSH_ORIGINAL_COMMAND
, 如果执行强制命令,此变量包含原始命令行。它可用于提取原始参数。; 由sshd(8)
守护进程设置,字符串,session.c
SSH_TTY
, 设置为与当前 shell 或命令关联的 tty(设备路径)的名称。如果当前会话没有 tty,则不设置此变量。由sshd(8)
., 字符串设置,session.c
SSH_TUNNEL
, 可选设置,sshd(8)
包含客户端请求隧道转发时分配的接口名称。, 字符串,session.c
SSH_USER_AUTH
, 此变量可选设置,sshd(8)
可能包含一个文件的路径名,该文件列出了会话建立时成功使用的身份验证方法,包括所使用的任何公钥。, 字符串,session.c
SUPATH
、超级用户 shell 中可执行程序所在的一组目录、文件路径列表、session.c
TERM
,UNIX 终端设备名称,字符串,session.c
TZ
,UNIX 时区,字符串,session.c
UMASK
,UNIX 文件权限掩码,4 位八进制,session.c
USER
, 设置为登录用户的名称。, 字符串,session.c
客户端/服务器可执行文件使用的环境
与上面列出的用户交互式 shell 会话相反,以下是直接影响ssh
客户端和sshd
守护进程本身的环境变量。
SSH 客户端
对于 OpenSSH 客户端,环境变量列表如下:
AUTHSTATE
- 仅限 IBM AIX;用于代替/etc/environment
、filespec、session.c
DISPLAY
,当前桌面会话的默认主机/显示编号/和屏幕;变量DISPLAY
指示 X11 服务器的位置。ssh 自动将其设置为指向“hostname:n”形式的值,其中“hostname”表示运行 shell 的主机,“n”是 ≥ 1 的整数。ssh 使用此特殊值通过安全通道转发 X11 连接。用户通常不应明确设置 DISPLAY,因为这将导致 X11 连接不安全(并要求用户手动复制任何所需的授权 cookie)。, :.,channels.c
mux.c
readpass.c
readpass.c
ssh.c
KRB5CCNAME
, Kerberos5 用户凭证缓存的绝对路径。, filepath,session.c
,sshd.c
HOME
、密码数据库指定的用户主目录的路径、filepath、sshconnect.c
LANG
、操作系统的区域设置、区域设置类别、misc.c
PATH
、可执行程序所在的目录集、文件路径列表、session.c
SHELL
, 密码数据库指定的用户 shell 可执行映像的文件路径。, filepath,readconf.c
sftp.c
ssh-agent.c
sshconnect.c
SSH_ASKPASS
, 如果 ssh 需要密码,那么它将从当前终端读取密码(如果它是从终端运行的)。如果 ssh 没有与之关联的终端,但设置了DISPLAY
和SSH_ASKPASS
,那么它将执行指定的程序SSH_ASKPASS
并打开 X11 窗口以读取密码。这在从 .xsession 或相关脚本调用 ssh 时特别有用。(请注意,在某些机器上,可能需要重定向输入才能/dev/null
使其工作。)由用户设置;指向 Ask Password 可执行程序/脚本的文件路径,文件路径,readpass.c
SSH_ASKPASS_ENV
,替代SSH_ASKPASS
,文件路径,readpass.c
SSH_ASKPASS_REQUIRE
, 允许进一步控制程序的使用askpass
。如果将此变量设置为“never
”,则 ssh 将永远不会尝试使用程序。如果将其设置为“prefer
”,则 ssh 在请求密码时将优先使用该askpass
程序而不是 TTY。最后,如果将变量设置为“force
”,则askpass
无论是否DISPLAY
设置,都将使用该程序输入所有密码。, 'never' 或 'prefer',readpass.c
SSH_ASKPASS_REQUIRE_ENV
,替代SSH_ASKPASS_REQUIRE
,文件路径,readpass.c
SSH_PKCS11_HELPER
, 与 HMS Vault、文件路径一起使用,ssh-pkcs11-client.c
SSH_SK_HELPER
, 安全密钥辅助二进制文件,用于 FIDO2 或 U2F 安全密钥。通常位于~/openssh/libexec/ssh-sk-helper
, 文件路径,ssh-sk-client.c
SSH_SOCKS_SERVER
, SOCKS 防火墙连接信息;由 SSH 用户在调用之前设置ssh(1)
,字符串,TERM
, TERM 环境变量用于终端处理。它允许 DB-Access(和其他基于字符的应用程序)识别您正在使用的终端并与之通信。,tty_name
,mux.c
ssh.c
TMPDIR
,TMPDIR
是 Unix 和 POSIX 中的规范环境变量,应用于指定暂存空间的临时目录。大多数 Unix 程序都会遵守此设置,并使用其值来表示临时文件的暂存区域,而不是常见的默认值或/tmp
./var/tmp
,dirpath
,misc.c
TZ
, 告诉您位于哪个时区。, 3 个字符的时区字符串, auth-pam.csession.c
SSH 服务器(守护进程)
对于 OpenSSH 服务器,环境变量列表如下:
KRB5CCNAME
, Kerberos5 用户凭证缓存的绝对路径。, filepath,session.c
,sshd.c
SSH_CONNECTION
, 标识连接的客户端和服务器端。该变量包含四个空格分隔的值:客户端 IP 地址和客户端端口号以及服务器 IP 地址和服务器端口号。SSH 客户端和服务器套接字连接信息;由 sshd(8) 守护进程设置,字符串,sftp-server.c
SHELL
, 密码数据库指定的用户 shell 可执行映像的文件路径。, filepath,readconf.c
sftp.c
ssh-agent.c
sshconnect.c
SSH 代理(守护进程)
对于 OpenSSH 代理,环境变量列表如下:
SHELL
, 密码数据库指定的用户 shell 可执行映像的文件路径。, filepath,readconf.c
sftp.c
ssh-agent.c
sshconnect.c
SSH_AGENTPID_ENV_NAME
, 包含身份验证代理的进程 ID 的环境变量的名称。, 进程 ID,ssh-agent.c
SSH_AUTHSOCKET_ENV_NAME
, 包含身份验证套接字路径名的环境变量的名称。, filepath,authfd.c
SSH_AUTH_SOCK
, 标识用于与代理通信的 UNIX 域套接字的路径。传递给 SSH 用户,UNIX 套接字路径,
SSH 密钥生成器(CLI)
对于该ssh-keygen
实用程序,环境变量列表如下:
SSH_SK_PROVIDER
, 安全密钥辅助二进制文件,用于 FIDO2 或 U2F 安全密钥。通常位于~/openssh/libexec/libsk-libfido2
, 文件路径,ssh-add.c
ssh-keygen.c
SSH_SK_HELPER
, 安全密钥辅助二进制文件,用于 FIDO2 或 U2F 安全密钥。通常位于~/openssh/libexec/ssh-sk-helper
, 文件路径,ssh-add.c
ssh-keygen.c
添加 SSH ssh-add(1) (命令行界面)
对于该ssh-add
实用程序,环境变量列表是:
SSH_SK_HELPER
, 安全密钥辅助二进制文件,用于 FIDO2 或 U2F 安全密钥。通常位于~/openssh/libexec/libsk-libfido2
, 文件路径,ssh-add.c
ssh-keygen.c