Vagrantfile。设置ssh代理的语言环境

问题描述 投票:11回答:6

我有一个问题描述here

出现此问题的原因是主机通过ssh将语言环境放入guest虚拟机。

解决这个问题的正确方法是什么?

我如何强制流浪ssh这样做:

LC_ALL=en_US.UTF-8 vagrant ssh

每一次?

ssh vagrant vagrantfile
6个回答
16
投票

我建议在Vagrantfile中覆盖主机区域设置

Vagrant.configure(2) do |config|

  config.vm.box = "ubuntu/vivid64"

  ENV['LC_ALL']="en_US.UTF-8"

end 

在Vagrant外部看不到变化(主机env变量保持不变)


1
投票

当连接到我的Vagrant Ubuntu盒子时,我在OSX上遇到了同样的问题(解决方案类似于Linux)。

我只是通过编辑/etc/ssh_config(或Linux上的/etc/ssh/ssh_config)并评论以下行来“解决”它:

# SendEnv LANG LC_*

这基本上阻止sshLANGLC_ALL(所有LC_变量)发送到远程主机,从而导致使用框中的默认值。在这种情况下en_US.UTF-8

显然,这将导致您的远程连接始终使用可能不是您想要的默认语言环境。

我相信你也可以设置每个主机的ssh偏好但从未这样做过。我对此感兴趣,可能值得一看。


1
投票

我的回答:我只是在我的ansible剧本中添加一行。但就只有Vagrant而言,它不是一个答案

- name: set locale
  lineinfile: dest=/etc/default/locale line="LC_ALL=C"

0
投票
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8

将这些行添加到VM的〜/ .bash_profile,然后通过vagrant重新启动VM


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

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
© www.soinside.com 2019 - 2024. All rights reserved.