Debian Debian 12Debian 13

Debian Linux: при работе по SSH не применяется переменная окружения

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

При подключении по SSH к Debian переменная может существовать в локальном терминале, но отсутствовать в удалённом сеансе, либо присутствовать при интерактивном входе и пропадать при запуске удалённой команды. Важны раздельные правила OpenSSH, PAM и оболочки.

В этой статье
  1. Когда возникает ошибка в Debian и какие условия важны
  2. Причины и как отличить их друг от друга
  3. Пошаговая диагностика и устранение
  4. Проверка результата и действия при неуспехе

#Когда возникает ошибка в Debian и какие условия важны

При подключении по SSH к Debian переменная может существовать в локальном терминале, но отсутствовать в удалённом сеансе, либо присутствовать при интерактивном входе и пропадать при запуске удалённой команды. Важны раздельные правила OpenSSH, PAM и оболочки.

#Причины и как отличить их друг от друга

Возможная причинаКак узнатьЧто делать
Переменная не передаётся SSHНа клиенте значение есть, на сервере printenv пуст.Сверить разрешённые SendEnv и AcceptEnv.
Настройки оболочки читаются не всегдаЛокальный интерактивный bash загружает другой набор файлов.Различить интерактивную, login и неинтерактивную оболочку.
Значение теряется после sudoДо смены прав значение доступно, после sudo — нет.Проверить secure_path и env_reset без глобального ослабления защиты.

#Пошаговая диагностика и устранение

  1. 1. Сначала определите, где именно пропадает значениеВ клиентском терминале выполните printenv для безопасной переменной, например LANG. После SSH-подключения повторите эту команду в Debian. Не подставляйте имена переменных с паролями, токенами или ключами; не отправляйте их в журнал или в сообщение об ошибке.
  2. Чтение данных и диагностика
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    printf "локальное значение: %s\n" "${LANG-не задано}"
    printenv LANG
  1. 2. Сравните интерактивный вход и единичную удалённую командуОткройте отдельную вкладку терминала на клиенте и выполните ssh ИМЯ@СЕРВЕР printenv LANG. В обычном сеансе ssh ИМЯ@СЕРВЕР затем выполните ту же команду. Различающийся вывод говорит о контексте запуска оболочки, но ещё не доказывает ошибку SSH.
  2. Чтение данных и диагностика
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    ssh ИМЯ@СЕРВЕР printenv LANG
  1. 3. Посмотрите активные параметры SSH со стороны клиентаВыполните ssh -G, указав реального получателя, и найдите поля sendenv. На сервере команды sshd -T обычно выполняет администратор; через неё выясните acceptenv и setenv. Значение AcceptEnv из конфигурации — разрешение, но не гарантия, что клиент отправил переменную.
  2. ssh -G запускается на клиенте, sshd -T — на сервере от администратора
    Linux · Терминал (Bash)КомандаНужен sudo
    ssh -G запускается на клиенте, sshd -T — на сервере от администратора.
    ssh -G ИМЯ@СЕРВЕР | grep -i "^sendenv"
    sudo sshd -T | grep -E "^(acceptenv|setenv)"
  1. 4. Проверьте файлы профиля конкретного пользователяНа сервере выясните домашний каталог и применяемую оболочку. Для bash файлы ~/.bash_profile, ~/.profile и ~/.bashrc читаются в разных условиях; shell-скрипты cron и systemd не обязаны читать их совсем. Не помещайте пароли в /etc/environment ради удобства.
  2. Чтение данных и диагностика
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    getent passwd "$(id -un)"
    printf "%s\n" "$SHELL"
    ls -la "$HOME/.profile" "$HOME/.bashrc" 2>/dev/null
  1. 5. При необходимости настройте безопасную передачу одного имениЕсли нужно переносить именно несекретную переменную, согласуйте с администратором SendEnv на клиенте и AcceptEnv на сервере только для этого имени. Прежде чем менять sshd_config, сделайте резервную копию и проверьте синтаксис командой sshd -t; не закрывайте текущую SSH-сессию до успешного входа во второй вкладке.
  2. Команды на сервере; тест только проверяет конфигурацию
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Команды на сервере; тест только проверяет конфигурацию.
    sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.backup-whelp
    sudo sshd -t

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 6. Проверьте, не вмешивается ли sudoСравните вывод printenv LANG обычного пользователя и команды через sudo. При настройке sudoers используйте visudo, не удаляйте env_reset массово: ограничения предотвращают подмену исполняемых команд и библиотек. Если проблема только после sudo, исправляйте разрешение строго для нужной задачи.
    Linux · Терминал (Bash)КомандаНужен sudo
    sudo потребуется только для второго сравнения.
    printenv LANG
    sudo printenv LANG
  1. 7. Подтвердите на новом подключенииОткройте новый SSH-сеанс, а прежний оставьте открытым на случай ошибки конфигурации. Сверьте значение в интерактивной и неинтерактивной командах, затем проверьте приложение, которому оно требуется. Если переменная вновь исчезает, запишите тип оболочки и итоговые SendEnv/AcceptEnv.
  2. Чтение данных и диагностика
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    ssh ИМЯ@СЕРВЕР printenv LANG

#Проверка результата и действия при неуспехе

Успешная настройка обеспечивает передачу только действительно необходимой несекретной переменной в правильный тип SSH-сеанса; безопасность и вход на сервер сохраняются.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.