Vagrantfile. Установить языковой стандарт для агента ssh

У меня проблема, описанная здесь

Эта проблема возникает из-за того, что хост-компьютер передал локаль гостю через ssh.

Как правильно решить эту проблему?

Как я могу заставить vagrant ssh сделать это:

LC_ALL=en_US.UTF-8 vagrant ssh

каждый раз?


person kharandziuk    schedule 04.12.2014    source источник


Ответы (6)


Предлагаю переопределить локаль хоста в Vagrantfile

Vagrant.configure(2) do |config|

  config.vm.box = "ubuntu/vivid64"

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

end 

Изменение не видно за пределами Vagrant (переменные env хоста остаются неизменными)

person michaldo    schedule 03.01.2016
comment
Пожалуйста, добавьте пояснение к своему ответу. Ответы, состоящие только из кода, обычно считаются низкокачественными. - person Tristan; 04.01.2016
comment
Я думаю, это работает. но возникает вопрос: может ли ENV['LC_ALL']="en_US.UTF-8" со временем что-то изменить на хост-машине? - person kharandziuk; 04.01.2016
comment
Мой хост остается неизменным, поэтому я думаю, что изменение только локальное (кстати, я немного упростил свой ответ) - person michaldo; 04.01.2016

У меня была такая же проблема на OSX (решение аналогично для Linux) при подключении к моим ящикам Vagrant Ubuntu.

Я просто "решил" это, отредактировав /etc/ssh_config (или /etc/ssh/ssh_config в Linux) и прокомментировав следующую строку:

# SendEnv LANG LC_*

Это в основном останавливает ssh от отправки LANG и LC_ALL (всех LC_ переменных) на удаленный хост, что приводит к использованию значения по умолчанию на поле. В данном случае en_US.UTF-8.

Очевидно, это приведет к тому, что ваши удаленные подключения всегда будут использовать языковой стандарт по умолчанию, который может быть не тем, что вам нужно.

Я считаю, что вы также можете установить предпочтения ssh для каждого хоста, но никогда этого не делал. Если вас это интересует, возможно, стоит посмотреть.

person ereOn    schedule 21.12.2014

Мой ответ: я просто добавляю строчку в свой доступный playbook. Но это не ответ только с точки зрения Vagrant

- name: set locale
  lineinfile: dest=/etc/default/locale line="LC_ALL=C"
person kharandziuk    schedule 04.01.2016

LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8

добавьте эти строки в ~ / .bash_profile виртуальной машины и перезапустите виртуальную машину через vagrant

person Mohammad Shahid Siddiqui    schedule 16.05.2016

Расширяя ответ Havok, вы можете сделать так, чтобы подготовка виртуальной машины обеспечивала создание языкового стандарта (en_US.UTF-8 ниже) и его использование всякий раз, когда вы подключаетесь к виртуальной машине по SSH (путем выполнения необходимых команд оболочки для настройки языковых стандартов). В 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
person Ivan Vilata-i-Balaguer    schedule 10.04.2019

Правильный способ - настроить демон 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
person Havok    schedule 18.05.2016