как отключить переменные SendEnv, установленные в ssh_config из ~ / .ssh / config


30

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

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

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


Это не ответ на ваш вопрос, но вы можете решить свою проблему, вызывая скрипты и программы на ваших тестовых компьютерах через envили с помощью скрипта-обертки?
Скотт

2
да, обходные пути возможны, но неудобны
akostadinov

Ответы:


18

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

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

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


4
Черт, я вижу, только -F в командной строке может помочь, но это слишком неудобно, чтобы действительно использовать. См bugzilla.mindrot.org/show_bug.cgi?id=1285
akostadinov

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

1

Есть опция SetEnv, можно принудительно LANGуказать какое-то конкретное значение перед отправкой.

Также страница руководства говорит, что

Можно очистить ранее установленные имена переменных SendEnv путем добавления префиксов к шаблонам -.

но мне не удалось сделать эту работу.


См. Bugzilla.mindrot.org/show_bug.cgi?id=1285 , вероятно, это объяснит, почему -подход не сработал. Хорошее предложение, хотя жестко закодировать удаленный LANG и другие переменные в конфигурации SSH. Делает вещи более предсказуемыми. Возможно, SetEnvэто более новая директива, потому что никто не предложил об этом. SetEnv LANG=en_US.UTF-8
Акостадинов

0

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


0

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

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


Вопрос в том, чтобы окружение было вменяемым автоматически. И кстати su не всегда устанавливается. И вы должны ввести свой пароль с помощью su. Не полезно. Есть более простые обходные пути.
Акостадинов

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

Смотрите мой комментарий выше. if one supplies on command line -F, then the system wide config is ignored according to man pageот bugzilla.mindrot.org/show_bug.cgi?id=1285 ; это вариант, но не совсем желаемая функция.
Акостадинов
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.