Ubuntu Ubuntu Linux

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

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

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

Переменная окружения видна в локальном терминале Ubuntu, но отсутствует при подключении по SSH или запуске команды ssh host команда. Это часто нормальное различие между интерактивным, входным и невходным сеансами, а не ошибка OpenSSH.

В этой статье
  1. Что означает проблема и кому подходит инструкция
  2. Возможные причины и отличительные признаки
  3. Диагностика и пошаговое устранение
  4. Как убедиться, что неисправность устранена
  5. Если результат не получен

#Что означает проблема и кому подходит инструкция

Переменная окружения видна в локальном терминале Ubuntu, но отсутствует при подключении по SSH или запуске команды ssh host команда. Это часто нормальное различие между интерактивным, входным и невходным сеансами, а не ошибка OpenSSH.

#Возможные причины и отличительные признаки

Возможная причинаКак узнатьЧто делать
Файл инициализации оболочки не читаетсяПеременная определена в ~/.bashrc, а удалённая команда запускается без интерактивной оболочки.Входной терминал видит переменную, однократный запуск ssh — нет.Определить, где переменная нужна, и задать её в соответствующем месте.
Переменная не экспортированаПрисваивание NAME=value в оболочке не передаёт значение дочерним процессам.В set есть имя, а env его не показывает.Экспортировать безопасное значение в нужном окружении.
sshd не принимает пересылаемую переменнуюAcceptEnv на сервере ограничивает разрешённые имена, SendEnv — на клиенте.Локально имя есть, но сервер его не получает.Настроить согласованную пересылку, не передавать секреты.

#Диагностика и пошаговое устранение

  1. 1. Сравните интерактивный вход и удалённую командуОткройте Терминал Ubuntu на клиенте. Подключитесь ssh пользователь@сервер, затем на сервере выполните printf и env. Повторите проверку отдельной командой ssh пользователь@сервер "printenv ИМЯ". В обоих случаях подставьте реальные адрес и название переменной; вывод для секрета не публикуйте и не печатайте без необходимости. Различия покажут, в какой сеанс не попало значение.
  2. Для первой проверки выполняется на сервере после SSH-входа; не выводите токены
    Linux · Терминал (Bash)Команда
    Для первой проверки выполняется на сервере после SSH-входа; не выводите токены.
    printf "%s\n" "$SHELL"
    printenv ИМЯ_ПЕРЕМЕННОЙ
  1. 2. Определите оболочку и режим её запускаВ SSH-сеансе посмотрите echo "$0", echo "$SHELL" и ps -p $$ -o args=. Bash может читать ~/.bash_profile или ~/.profile при входе и ~/.bashrc в интерактивном невходном сеансе; поведение удалённого запуска зависит от оболочки и конфигурации. Не предполагаете, что ~/.bashrc всегда читается.
  2. Просмотрить файл конфигурации выбранной оболочки до изменений
    Linux · Терминал (Bash)Команда
    Просмотрить файл конфигурации выбранной оболочки до изменений.
    printf "shell=%s, argv0=%s\n" "$SHELL" "$0"
    ps -p $$ -o args=
  1. 3. Проверьте экспорт переменнойВ той оболочке, где значение уже задано, команда printenv ИМЯ_ПЕРЕМЕННОЙ покажет только экспортированные значения. Если пусто, а echo "$ИМЯ_ПЕРЕМЕННОЙ" не пусто, проверьте, как выполняется присваивание. Для несекретного значения можно в тестовом сеансе выполнить export ИМЯ_ПЕРЕМЕННОЙ=тест, запустить env и убедиться, что дочерние процессы его видят. Настройка действует до выхода из оболочки.
    Linux · Терминал (Bash)Команда
    Заменить имя; не передавать пароли через переменные окружения без оценки рисков.
    printenv ИМЯ_ПЕРЕМЕННОЙ
    env | grep "^ИМЯ_ПЕРЕМЕННОЙ="
  1. 4. Выберите место для постоянного определенияДля личной интерактивной работы отредактируйте конфигурацию используемой оболочки и добавьте export ИМЯ=значение только для несекретного параметра; перед правкой сделайте копию файла. Для systemd-службы используйте её Environment= / EnvironmentFile= или механизмы Credentials — ~/.bashrc её не настроит. Для разовой удалённой команды более надёжно явно передавать допустимое значение в той же команде, если оно не секретное.
  2. Изменение файлов не выполняется автоматически
    Linux · Терминал (Bash)Команда
    Изменение файлов не выполняется автоматически. Исключите секреты из истории команд.
    ls -la ~/.profile ~/.bash_profile ~/.bashrc 2>/dev/null
    printenv SHELL
  1. 5. Если нужна передача с клиента, проверьте правила SSHНа клиенте конфигурация SendEnv определяет, что разрешено отправлять; на сервере AcceptEnv — что будет принято. Администратор сервера может посмотреть итоговые параметры через sudo sshd -T и настроить минимальный список в /etc/ssh/sshd_config или отдельном файле в sshd_config.d. Перед перезапуском sshd обязательна sudo sshd -t, запасное соединение оставьте открытым. Не разрешайте AcceptEnv *.
    Linux · Терминал (Bash)КомандаНужен sudo
    Только на сервере под администратором; команды не изменяют настройки.
    sudo sshd -t
    sudo sshd -T | grep -i acceptenv
  1. 6. Проверьте новый сеанс, а не существующийЗавершите тестовое SSH-соединение командой exit; подключитесь снова и выполните printenv ИМЯ, а затем удалённую команду (если она важна). Если переменная доступна только в одной форме входа, это ожидаемое отличие режимов — настройте конкретный способ запуска, вместо глобальной модификации всех пользователей.
    Linux · Терминал (Bash)Команда
    Запуск в новом SSH-сеансе подтверждает, что изменение действительно постоянное.
    printenv ИМЯ_ПЕРЕМЕННОЙ

#Как убедиться, что неисправность устранена

Решение считается рабочим, когда несекретная переменная доступна ровно тому процессу и режиму SSH, которому предназначалась. Если проблема относится к systemd или cron, настройка SSH сама по себе её не исправит.

#Если результат не получен

Не повторяйте опасные действия наугад. Сохраните точную формулировку ошибки, вывод диагностики без секретов, версию Ubuntu и данные о затронутом компоненте. Верните лишь собственные изменения из резервной копии; если затронута загрузка, диски или рабочий сервер, воспользуйтесь консолью восстановления либо помощью администратора.

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

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

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