我在任何地方都找不到,所以我想知道我是唯一遇到这种问题的人。
缺省情况下,Red Hat和Debian上的ssh至少具有ssh_config,其中的SendEnv选项在远程会话中传递LC *和LANG变量。如果不是root来更改/ etc / ssh / ssh_config,那么他如何禁用该行为?SendEnv选项似乎正在累积,我看不到任何方法来重置它。
为了避免被询问,我需要避免将语言环境传递给测试计算机,以免对依赖于语言环境作为计算机默认值的脚本和程序产生副作用。
我在任何地方都找不到,所以我想知道我是唯一遇到这种问题的人。
缺省情况下,Red Hat和Debian上的ssh至少具有ssh_config,其中的SendEnv选项在远程会话中传递LC *和LANG变量。如果不是root来更改/ etc / ssh / ssh_config,那么他如何禁用该行为?SendEnv选项似乎正在累积,我看不到任何方法来重置它。
为了避免被询问,我需要避免将语言环境传递给测试计算机,以免对依赖于语言环境作为计算机默认值的脚本和程序产生副作用。
Answers:
你不是唯一的一个。如ssh_config(5)
您所记录,您无法取消设置SendEnv
,因为
多个环境变量可能分布在多个SendEnv指令中。
如果您在测试计算机上具有root用户,则可以更改AcceptEnv
为不接受客户端发送的变量。
无法完成此操作,~/.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
有SetEnv
一个选项,可以LANG
在发送前强制为某个特定值。
另外手册页说
可以通过在模式之前添加前缀来清除先前设置的SendEnv变量名
-
。
但是我没有设法做到这一点。
-
方法行不通。最好还是在ssh config中对远程LANG和其他var进行硬编码。使事情更可预测。也许SetEnv
是更新的指令,因为没有其他人对此提出建议。SetEnv LANG=en_US.UTF-8
su - youruser
通过ssh登录时可以使用。这将为用户重新初始化环境。
实际上,您使用新环境初始化了一个新会话。
根据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
if one supplies on command line -F, then the system wide config is ignored according to man page
来自bugzilla.mindrot.org/show_bug.cgi?id=1285 ; 它是一个选项,但并不是真正想要的功能。
env
使用包装程序脚本或使用包装程序脚本来调用测试计算机上的脚本和程序来解决问题吗?