如何从 ~/.ssh/config 禁用 ssh_config 中设置的 SendEnv 变量

如何从 ~/.ssh/config 禁用 ssh_config 中设置的 SendEnv 变量

我在任何地方都找不到这个,所以我想知道我是否是唯一遇到此类问题的人。

默认情况下,Red Hat 和 Debian 上的 ssh 至少有一个带有 SendEnv 选项的 ssh_config,可在远程会话中传递 LC* 和 LANG 变量。如果某人不是 root 来更改 /etc/ssh/ssh_config,他如何禁用该行为?SendEnv 选项似乎在累积,我看不出有任何方法可以重置它。

为了避免被问到,我需要避免将我的语言环境传递给测试机器,以避免对依赖于语言环境作为机器默认设置的脚本和程序产生副作用。

答案1

你是并非唯一. 如上所述,ssh_config(5)您无法取消设置SendEnv,因为

多个环境变量可能分布在多个 SendEnv 指令中。

但是,如果您在测试机器上拥有 root 权限,则可以更改AcceptEnv为不接受客户端发送的变量。

答案2

这无法完成,~/.ssh/config因为SendEnv无法被覆盖。

对于调用 ssh 的脚本,使用别名不起作用。

一种替代方法是导出一个函数。例如~/.bashrc

function ssh() {
    LANG="en_US.UTF-8" \
    LC_ADDRESS="$LANG" \
    LC_IDENTIFICATION="$LANG" \
    LC_MEASUREMENT="$LANG" \
    LC_MONETARY="$LANG" \
    LC_NAME="$LANG" \
    LC_NUMERIC="$LANG" \
    LC_PAPER="$LANG" \
    LC_TELEPHONE="$LANG" \
    LC_TIME="$LANG" \
    LC_ALL="$LANG" \
    /usr/bin/ssh $@
}
export -f ssh

答案3

根据man ssh

 -F configfile
         Specifies an alternative per-user configuration file.  If a con-
         figuration file is given on the command line, the system-wide
         configuration file (/etc/ssh/ssh_config) will be ignored.  The
         default for the per-user configuration file is ~/.ssh/config.

因此,你可以 ssh不遵守/etc/ssh/ssh_config通过在命令行上明确指定(默认)配置文件(~/.ssh/config可以为空):

$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_host

您可以在以下位置为其创建别名~/.bashrc

alias ssh="ssh -F ~/.ssh/config"

重新启动 bash shell,然后您可以像这样简单地 ssh:

$ ssh your_user@your_host

答案4

如果您使用 bash,您可以设置别名 ssh='LANG=command ssh' 来禁用将 LANG 传递给其他服务器。

相关内容