운영체제

Linux ssh 접속시 locale(LANG, LC_*) 전달

warpmemory 2017. 9. 20. 10:30

ssh 로 접속후 crond 재시작 후 crond 에서 실행하는 스크립트에 변수가 한글이 들어가면 에러가 나는 경우가 발생했다.

알고보니, 접속하는 로컬의 locale 설정이 원격지에 ssh 접속 시 적용이 되었고,

로컬의 LANG=en_US 환경이 적용된 상태에서 crond가 재시작 되어 crond에서 실행하는 스크립트에 영향을 미친 것이었다. =ㅁㅠ


ssh 접속할때 locale(LANG, LC_*) 전달은

로컬 /etc/ssh/ssh_config 파일에 SendEnv LANG LC_* 설정이 존재하면 ssh 접속시 locale 설정이 같이 전송되고,

원격 /etc/ssh/sshd_config 파일에 AcceptEnv LANG LC_* 설정이 존재하면 ssh 클라이언트에 전송된 locale 설정을 적용하도록 되어있다.


일단 ~/.bash_profile 에 넣어주면 .bash_profile 설정을 최종 적용하는 것으로 확인이되어서 .bash_profile 파일에 export LANG=en_US.UTF-8 처리하고 마무리 지었다.


추가로 해당 이슈나는 스크립트가 python 이였고, subprocess.Popen 실행시 한글이 포함되어있으면 문제가 생긴 케이스였는데, 스크립트 상에서 LANG 환경변수 처리를 할 수도 있다.


1
2
3
4
5
6
7
8
import os
import subprocess
 
my_env = os.environ.copy()
my_env["LANG"= "en_US.UTF-8"
 
my_command = "locale"
subprocess.Popen(my_command, env=my_env)
cs


위와 같이 처리 해주면, subprocess.Popen 실행시 특정 환경 수만 바꿔서 실행 할 수 있다.