我遇到问题here
出现此问题是因为主机通过ssh将语言环境放入guest虚拟机。
解决这个问题的正确方法是什么?
我如何强制流浪ssh这样做:
LC_ALL=en_US.UTF-8 vagrant ssh
每一次?
答案 0 :(得分:16)
我建议在Vagrantfile中覆盖主机区域设置
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/vivid64"
ENV['LC_ALL']="en_US.UTF-8"
end
在Vagrant外部看不到变化(主机env变量保持不变)
答案 1 :(得分:1)
当连接到我的Vagrant Ubuntu盒子时,我在OSX上遇到了同样的问题(Linux的解决方案类似)。
我只是"解决了#34;通过编辑/etc/ssh_config
(或Linux上的/etc/ssh/ssh_config
)并注释以下行:
# SendEnv LANG LC_*
这基本上会阻止ssh
将LANG
和LC_ALL
(所有LC_
个变量)发送到远程主机,从而导致使用框中的默认值。在这种情况下en_US.UTF-8
。
显然这会导致您的远程连接始终使用可能不是您想要的默认语言环境。
我相信您也可以为每台主机设置ssh偏好但从未这样做过。我对此感兴趣,可能值得一看。
答案 2 :(得分:1)
我的回答:我只是在我的ansible剧本中添加一行。但就“流浪汉”而言,它并不是一个答案
- name: set locale
lineinfile: dest=/etc/default/locale line="LC_ALL=C"
答案 3 :(得分:0)
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
将这些行添加到VM的〜/ .bash_profile,并通过vagrant重启VM
答案 4 :(得分:0)
正确的方法是在虚拟机中配置ssh守护程序,使其不接受此环境变量。
在您的开发环境中修改文件/etc/ssh/sshd_config
并对AcceptEnv
行进行评论,如下所示:
$ cat /etc/ssh/sshd_config | grep AcceptEnv
# AcceptEnv LANG LC_*
如果你使用Docker作为提供者,你可以放入你的Dockerfile:
sed -i 's/AcceptEnv/# AcceptEnv/' /etc/ssh/sshd_config
您还需要生成并设置默认语言环境。你可以用:
来做到这一点# Set the locale
ENV LANG en_US.UTF-8
RUN locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8
答案 5 :(得分:0)
扩展Havok的答案,您可以使VM设置确保创建一个语言环境(下面的en_US.UTF-8
),并在您通过SSH进入VM时(通过运行必要的shell命令配置语言环境)使用该语言环境。在Vagrantfile
中:
config.vm.provision "shell", inline: <<-EOF
apt-get update
apt-get install -y locales # install locales support
echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen
locale-gen # enable locales in `/etc/locale.gen`
update-locale LANG=en_US.UTF-8 # setup default VM locale
sed -i -E 's/^(\s*AcceptEnv\b)/#\1/' /etc/ssh/sshd_config # avoid SSH overriding it
EOF