DietMountain的个人博客分享 http://blog.sciencenet.cn/u/DietMountain

博文

ssh 远程连接时取消继承 locale 环境变量

已有 2363 次阅读 2020-12-16 00:27 |个人分类:计算机相关|系统分类:科研笔记

想在 mtputty 下新开一个 putty 窗口下载安装某软件,由于已经打开的putty标签页实在太多了,就试了试微软新出的终端工具 Windows Terminal。打开默认是 WSL 的窗口(好像是某一次在它的 json 配置文件里设置过)。于是 ssh 登录到集群管理节点,进行 git clone。测试软件时却发现 Perl 的解释器总是会报 locale 相关的警告,提示如下

perl: warning: Setting locale failed.

perl: warning: Please check that your locale settings:

        LANGUAGE = (unset),

        LC_ALL = (unset),

        LC_COLLATE = "C",

        LANG = "C.UTF-8"

    are supported and installed on your system.

perl: warning: Falling back to the standard locale ("C").

这个警告之前倒是见过,设置一下 LC_ALL=C 可以解决,但是之前发现某些软件的某些 Python 脚本要求运行环境的 LANG 环境变量必须为 en_US.UTF-8,否则会报错退出,于是没有采用这个方法。

但是我这几天都在计算节点上跑各种基于 Perl 的任务怎么没出这个警告呢?于是在已经打开的 putty 窗口里面随便选了一个,测试了一下 `perl -v` ,是正常的输出。 exit 到管理节点,`perl -v` 还是正常输出。重新用 Windows Terminal (WSL) 连接到管理节点,运行 Perl 解释器会有这个警告,并且环境变量 LANG 的值是 "C.UTF-8",而 putty 远程连接的 shell 里面这个值是默认的"en_US.UTF-8",看来问题在终端工具上。

于是搜索“WSL ssh locale”相关的信息,没找到什么有用的。想在ChinaUnix论坛上发帖求助,结果发现要添加3个好友才能发帖(上一次登录时还可以随便发帖的……)缩减一下搜索关键词为“ssh locale“,终于用 bing 搜索到相关的了:

https://stackoverflow.com/questions/29609371/how-do-not-pass-locale-through-ssh

原来 ssh 连接时默认会 "pass" 当前 shell 的一些环境变量到新建的 login shell 中,由 ssh config 文件(默认应该是 /etc/ssh/ssh_config)控制,其中有一行:

SendEnv LANG LC_*

将其注释掉即可。或者在 ssh服务端(即目标主机的sshd)的 config 文件中(默认应该是 /etc/ssh/sshd_config)注释掉这一行:

AcceptEnv LANG LC_*

而 putty 是虚拟的终端(貌似吧……)所以没有所谓当前的 shell,不会传递 locale 环境变量到新的 login shell 中,所以用 putty 远程连接和在真实的 shell 中用 ssh 客户端进行远程连接还是有区别的。试了下用 Windows Terminal (PowerShell) 运行系统自带的 OpenSSH 客户端进行远程连接,发现和 putty 效果一样。



https://wap.sciencenet.cn/blog-3414436-1262652.html

上一篇:Linux命令行选项的三种风格
下一篇:Perl 语言中利用自增对数组元素去重
收藏 IP: 27.38.243.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-24 09:56

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部