як відключити 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.

Якщо у вас є корінь на тестових машинах, ви можете змінити, 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перед тим, як надіслати його , можна примусити до певного значення.

Також про це говорить сторінка man

Очистити раніше встановлені імена змінних SendEnv можна, встановивши шаблони за допомогою -.

але мені не вдалося зробити цю роботу.


Див. Bugzilla.mindrot.org/show_bug.cgi?id=1285 , ймовірно, це пояснить, чому -підхід не працює. Хороша пропозиція, хоч жорсткий код віддаленої LANG та інших vars в ssh config. Робить речі більш передбачуваними. Можливо SetEnv, це новіша директива, оскільки ніхто інший не пропонував її. SetEnv LANG=en_US.UTF-8
акостадінов

0

Якщо ви використовуєте bash, ви можете встановити псевдонім ssh = 'LANG = command ssh', щоб відключити передачу LANG на інші сервери.


0

Ви можете використовувати su - youruserпід час входу через ssh. Це повторно реалізує середовище для користувача.

Насправді ви ініціалізуєте новий сеанс з новим середовищем.


Питання полягає в тому, щоб навколишнє середовище було автоматично розроблено. І btw 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/configOK буде порожнім):

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

Псевдонім для нього можна зробити в ~/.bashrc:

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

Перезапустіть bash shell, тоді ви можете просто 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.