ssh影响环境变量locale

问题场景

1.ssh登录到服务器启动Jenkins,把自己本地的环境变量带入服务器,Jenkins启动时读取了服务器环境变量,然后再去ssh服务器部署Java应用时带入Java进程,最终结果是把登录用户的环境变量带入了生产环境中,可能出现问题
2.ssh登录服务器,直接启动Java进程,把登录用户的环境变量带入了Java进程环境中,可能出现问题

原因分析

通过ssh登录服务器时,ssh默认会把本地环境变量带入到服务器,可以通过参数 -v 观察
例如:

ssh git@server-name -v


debug1: Sending environment.
debug1: Sending env LANG = zh_CN.UTF-8
debug1: Sending env LC_CTYPE = zh_CN.UTF-8
debug1: Sending env LC_ALL = zh_CN.UTF-8

如果本地设置了zh_CN.UTF-8,就会带入服务器,导致服务器环境变量被修改。
[git@***-scm ~]$ locale
LANG=zh_CN.UTF-8
LC_CTYPE=“zh_CN.UTF-8”
LC_NUMERIC=“zh_CN.UTF-8”
LC_TIME=“zh_CN.UTF-8”
LC_COLLATE=“zh_CN.UTF-8”
LC_MONETARY=“zh_CN.UTF-8”
LC_MESSAGES=“zh_CN.UTF-8”
LC_PAPER=“zh_CN.UTF-8”
LC_NAME=“zh_CN.UTF-8”
LC_ADDRESS=“zh_CN.UTF-8”
LC_TELEPHONE=“zh_CN.UTF-8”
LC_MEASUREMENT=“zh_CN.UTF-8”
LC_IDENTIFICATION=“zh_CN.UTF-8”
LC_ALL=zh_CN.UTF-8
⚠️在服务器环境变量被修改的情况下,再去启动Java程序,会导致Java进程读取当前的环境变量,也就是登录用户带上去的,会影响到Java程序里的日期格式、字符串编码等。

解决方法

禁止SSH登录带入环境变量
方法1:
登录用户的机器设置ssh属性,登录时不发送环境变量。
sudo vim /etc/ssh/ssh_config

Send locale-related environment variables
# SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
# SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
# SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
# SendEnv XMODIFIERS
去掉 SendEnv 开头的配置。

方法2:
在服务器端设置sshd属性,设置不接收客户端的环境变量
sudo vim /etc/ssh/sshd_config

Accept locale-related environment variables
# AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
# AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
# AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
# AcceptEnv XMODIFIERS
去掉 AcceptEnv 开头的配置。

其他说明

内容为以前公司内看到的,无转载链接

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值