登陆获取shell时的配置文件加载过程
最近遇到一台ubuntu服务器登陆时默认语言环境变量变成posix问题, 导致中文显示乱码,影响程序的正常运行
# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
按照常规的分析,应该是开机没有加载某个配置文件
在ubuntu系统下,语言变量一般是在 /etc/default/locale 中设置的,安装系统时选择的语言最终也会写入到这里
查看这个值发现并没有问题
cat /etc/default/locale
LANG="en_US.UTF-8"
那么另一个可以设置这个变量的就是 /etc/environment 了
在测试时,系统这个文件上并没有写入 LANG的配置,其实这也是合理的
现在最主要的问题是ssh登陆时没有加载到配置文件 /etc/default/locale
找了一会问题,还没完全解决,这时告诉同事等会再来排查问题。突然同时说问题已经解决了,
遂激动的询问是怎样解决的。
直接在 /etc/profile 里面加上 export LANG=en.US-UTF-8
尴尬了。。。 这么简单的事。。一直想着查找为什么无法加载locale文件,忘记了最简单的解决办法。下次切记~~
登陆流程获取shell,肯定会加载profile文件嘛,还有在用户家目录里面设置环境变量也是可以的
当然,上面虽然可以正常解决问题,可是具体原因并没有对症下药
后来对比了login获取shell时的环境变量 和su时获取的环境变量, 发现这两个都是正常的
查看了ssh的配置文件 /etc/ssh/sshd_config, 其中有一句
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
按照注释看,这应该是加载本地的环境变量, 所以我把当前shell的语言变量设置成其他的,用ssh到其他电脑,果然环境变量会随着本地机器的设定而变化,然后再用login及su登陆系统, 奇怪的是系通正常设定了语言(这才应该是正常的情况)
问题到这,已经确定是ssh登陆时会有问题,而login和su登陆没有问题
简单的联想到是不是PAM模块未加载这个配置文件,一番对比,发现 /etc/pam.d/ 下面的 login su sshd 并没有太大的区别 都有一句加载locale变量
# Read environment variables from /etc/environment and
# /etc/security/pam_env.conf.
session required pam_env.so # [1]
# In Debian 4.0 (etch), locale-related environment variables were moved to
# /etc/default/locale, so read that as well.
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
按理说,这应该是没问题的。。。
往往,答案就隐藏在某个看不见的最安全的也是最容易发现地方,只是可惜被我忽略了
在sshd_config配置文件的最后有一个配置
UsePAM no
都已经设置成不加载PAM模块了,之前设定的语言变量肯定也不会被加载了嘛, 更改成yes后,登陆正常
再来看下曾今答案离我多近
ClientAliveInterval 3600
ClientAliveCountMax 10
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
#UsePAM no
UsePAM yes
也就是在设定加载本地语言环境变量的下面。。。。
好了,现在粗略总结下系统登陆时获取shell的加载过程。排除登陆问题可以按照这些流程一一排查可能出错的地方
开机-->init程序-->获取登陆shell-->加载PAM模块-->加载/etc/profile文件-->加载用户家目录配置文件
网络的设置是在init程序的时候由/etc/init.d内文件指定,开机时会按顺序加载,作为开机自启程序
PAM模块 会加载一些环境变量
/etc/profile文件会调用一些其他设置,包括/etc/profile.d/*.conf 文件
用户家目录配置文件可以设定一些自定义变量, 比如可以设置语言为 zh_CN.UTF-8 (系统环境最好保持en_US.UTF-8)
登陆获取shell时的配置文件加载过程的更多相关文章
- asp.netcore 深入了解配置文件加载过程
前言 配置文件中程序运行中,担当着不可或缺的角色:通常情况下,使用 visual studio 进行创建项目过程中,项目配置文件会自动生成在项目根目录下,如 appsettings.json, ...
- .net core 深入了解配置文件加载过程
前言 配置文件中程序运行中,担当着不可或缺的角色:通常情况下,使用 visual studio 进行创建项目过程中,项目配置文件会自动生成在项目根目录下,如 appsettings.json, ...
- shell脚本,配置文件加载顺序,以及什么时候加载。
在linux系统中,有/etc/profile,/etc/bashrc ,~/.bash_profile,~/bashrc这四个配置文件,这些文件,会自动的在某些时候加载,也就是点一下,一般都是些别名 ...
- springboot启动流程(四)application配置文件加载过程
所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 触发监听器加载配置文件 在上一篇文章中,我们看到了Environment对象的创建方法.同时也 ...
- Java web 项目 web.xml 配置文件加载过程
转载自:http://blog.csdn.net/luoliehe/article/details/46884757#comments WEB加载web.xml初始化过程: 在启动Web项目时,容器( ...
- 解决eclipse部署maven时,src/main/resources里面配置文件加载不到webapp下classes路径下的问题
解决eclipse部署maven时,src/main/resources里面配置文件加载不到webapp下classes路径下的问题. 有时候是src/main/resources下面的,有时候是sr ...
- myeclipse部署maven时,src/main/resources里面配置文件加载不到webapp下classes路径下的问题
解决myeclipse部署maven时,src/main/resources里面配置文件加载不到webapp下classes路径下的问题. 有时候是src/main/resources下面的,有时候是 ...
- bash 的配置文件加载顺序
bash配置文件的加载顺序和登陆方式有关,下面先介绍下登陆方式. 1 登陆方式有2种 登陆式SHELL: su - oracle su -l oracle 正常从终端登陆 非登录式SHELL: ...
- Heka 的配置文件加载逻辑
Heka 使用的是 TOML 格式的配置文件, 有关 golang 加载 TOML 配置文件的技术请参看: http://www.cnblogs.com/ghj1976/p/4082323.html ...
随机推荐
- 从头认识Spring-1.15 对SpEl的值的操作(1)-数值运算
这一章节我们来讨论一下对SpEl的值的运算. 1.domain 烤炉类:(不变) package com.raylee.my_new_spring.my_new_spring.ch01.topic_1 ...
- Android应用架构之MVP--->天气实例
我们知道.Android App 本质上抽象成两个层次:视图和数据.为了App在发展过程中高速的适应变化,方便维护和高速迭代,我们要将数据和视图解耦,而在解藕方面我们的前辈们在漫长的软件开发经验中为我 ...
- hadoop常见算法(持续更新)
1. 对以下数据进行排序,根据收入减去支出得到最后结余从大到小排序 账号 收入 支出 日期 zhangsan@163.com 6000 0 2014-02-20 lisi@163.com 2000 0 ...
- KSTORE日常工作遇到问题总结
1.csv导入kstore命令语句 oimpexp -F "E:/127.csv" -S KSTORE -T "T_BUSDATA" -d 1 -z -B 7 ...
- (转) 对svn分支合并类型和深度的理解
合并的工作是把主干或者分支上合并范围内的所有改动列出,并对比当前工作副本的内容,由合并者手工修改冲突,然后提交到服务器的相应目录里.如果当前工作副本是主干,则合并的范围是分支上的改动,如果工作副本是分 ...
- java程序优化
程序代码优化要点: 字符串优化:分析String源码,了解String常用方法,使用StringBuffer.StringBuilder. List.Map.Set优化:分析常用ArrayList.L ...
- c# 控制台程序 隐藏控制台窗口
在某些项目中,需要采用控制台程序,但是又不需要通过dos窗口进行交互,同时打算隐藏掉难看的控制台窗口.实现的方法很多,有的是修改链接命令.我采用的方法略有些麻烦,首先是给窗口命名,之后找到该窗口指针, ...
- MUI 清除缓存
mui 清除但是在ios和安卓稍微有点区别, ios可以清除的很彻底,下载文件也能删除: 安卓能清理缓存,但是不能删除下载的文件: plus.cache.calculate(function(size ...
- com.netflix.hystrix.contrib.javanica.exception.FallbackDefinitionException: fallback method wasn't found: serviceError([class java.lang.String]) 异常
在使用spring cloud 的 Hystrix 后可能会遇到 如下截图错误: 后台代码如下: 找了好一会经过分析参数方法和原方法参数步一致造成: 修改后代码如下:
- Watering Grass(贪心)
Watering Grass n sprinklers are installed in a horizontal strip of grass l meters long and w meters ...