28

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

По умолчанию ssh в Red Hat и Debian по крайней мере имеет ssh_config с опцией SendEnv, передающей переменные LC * и LANG в удаленном сеансе. Если кто-то не root для изменения /etc /ssh /ssh_config, как он может отключить это поведение? Опция SendEnv, похоже, накапливается, и я не вижу способа ее сбросить.

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

5 ответов5

18

Ты не единственный. Как описано в ssh_config(5) вы не можете SendEnv , потому что

Несколько переменных среды могут быть распределены [...] по нескольким директивам SendEnv.

Если у вас есть root на тестовых машинах, вы можете изменить AcceptEnv чтобы он не принимал переменные, отправленные клиентом.

5

Это не может быть сделано в ~/.ssh/config потому что SendEnv не может быть переопределен.

Использование псевдонимов не будет работать для скриптов, которые вызывают ssh.

Одним из вариантов является экспорт функции. Например, в ~/.bashrc:

function ssh() {
    LANG="en_US.UTF-8" \
    LC_ADDRESS="$LANG" \
    LC_IDENTIFICATION="$LANG" \
    LC_MEASUREMENT="$LANG" \
    LC_MONETARY="$LANG" \
    LC_NAME="$LANG" \
    LC_NUMERIC="$LANG" \
    LC_PAPER="$LANG" \
    LC_TELEPHONE="$LANG" \
    LC_TIME="$LANG" \
    LC_ALL="$LANG" \
    /usr/bin/ssh $@
}
export -f ssh
0

По словам man ssh:

 -F configfile
         Specifies an alternative per-user configuration file.  If a con-
         figuration file is given on the command line, the system-wide
         configuration file (/etc/ssh/ssh_config) will be ignored.  The
         default for the per-user configuration file is ~/.ssh/config.

Таким образом, вы можете выполнить ssh без соблюдения /etc/ssh/ssh_config , явно указав файл конфигурации (по умолчанию) в командной строке (~/.ssh/config разрешает быть пустым):

$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_host

Вы можете сделать для него псевдоним в ~/.bashrc:

alias ssh="ssh -F ~/.ssh/config"

Перезапустите оболочку bash, тогда вы можете просто использовать ssh так:

$ ssh your_user@your_host
0

Если вы используете bash, вы можете настроить псевдоним ssh = 'LANG = command ssh', чтобы отключить передачу LANG другим серверам.

0

Вы можете использовать su - youruser когда вы вошли в систему через ssh. Это повторно инициализирует среду для пользователя.

На самом деле вы инициализируете новый сеанс с новой средой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .