2014-12-04 17 views
11

Ho un problema descritto hereVagrantfile. Imposta locale per agente ssh

Questo problema si verifica perché la macchina host inserisce le impostazioni locali in guest tramite ssh.

Qual è il modo corretto per risolvere questo problema?

Come posso forzare ssh vagabonda per fare questo:

LC_ALL=en_US.UTF-8 vagrant ssh 

ogni volta?

risposta

16

propongo locale ospite di override in Vagrantfile

Vagrant.configure(2) do |config| 

    config.vm.box = "ubuntu/vivid64" 

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

end 

Il cambiamento non è visibile all'esterno Vagrant (variabili env ospite rimane invariato)

+0

Per favore aggiungi qualche spiegazione alla tua risposta. Le risposte al solo codice sono generalmente considerate di bassa qualità – Tristan

+0

bella risposta!Controllerò e accetto se funziona – kharandziuk

+0

Immagino che funzioni. ma c'è una domanda: Può il 'ENV ['LC_ALL'] =" en_US.UTF-8 "' alla fine cambiare qualcosa sulla macchina host? – kharandziuk

1

Ho avuto lo stesso problema su OSX (la soluzione è simile per Linux) durante la connessione alle mie caselle di Ubuntu di Vagrant.

ho semplicemente "risolto" è modificando /etc/ssh_config (o /etc/ssh/ssh_config su Linux) e commentando la seguente riga:

# SendEnv LANG LC_* 

Questo impedisce fondamentalmente ssh di inviare le LANG e LC_ALL (tutti LC_ variabili) al telecomando host, risultante nell'utilizzo del valore predefinito sulla casella. In questo caso en_US.UTF-8.

Ovviamente questo farà sì che le connessioni remote utilizzino sempre le impostazioni internazionali predefinite che potrebbero non essere quelle desiderate.

Credo che sia possibile anche impostare le preferenze ssh per host, ma non l'abbiamo mai fatto. Se ti interessa, potrebbe valere la pena guardare.

1

La mia risposta: Ho appena aggiungere una linea al mio playbook ansible. Ma non è una risposta in termini di solo 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 

aggiungere queste righe a ~/.bash_profile di VM, e riavviare VM via vagabondo

0

Il modo corretto è quello di configurare il daemon ssh nella macchina virtuale per non accettare queste variabili di ambiente.

Modifica nell'ambiente di sviluppo il file /etc/ssh/sshd_config e commentare la linea AcceptEnv in questo modo:

$ cat /etc/ssh/sshd_config | grep AcceptEnv 
# AcceptEnv LANG LC_* 

Se stai usando Docker come fornitore si può mettere nel vostro Dockerfile:

sed -i 's/AcceptEnv/# AcceptEnv/' /etc/ssh/sshd_config 

È è necessario generare e impostare anche la locale predefinita. Puoi farlo con:

# Set the locale 
ENV LANG en_US.UTF-8 
RUN locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8