Rocky Linux Rocky Linux

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

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

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

Команда по SSH не получает переменную, которая есть при локальном входе. Не все SSH-сессии запускают интерактивную или login-оболочку; настройки клиента и сервера могут ограничивать приём переменных.

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

#Когда возникает проблема и к каким системам относится

Команда по SSH не получает переменную, которая есть при локальном входе. Не все SSH-сессии запускают интерактивную или login-оболочку; настройки клиента и сервера могут ограничивать приём переменных. Rocky Linux с OpenSSH; речь о переменных окружения пользовательской оболочки при подключении по SSH, а не о передаче секретов.

#Основные причины: как отличить одну от другой

Возможная причинаКак узнатьЧто делать
Разный режим оболочкиssh host команда выполняется без интерактивного профиляecho в интерактивной сессии отличается от ssh host envРазместить конфигурацию в подходящем для режима месте
Ограничена пересылка переменныхSendEnv на клиенте не соответствует AcceptEnv на сервереПри подключении переменная не появляется в envПроверить ssh_config и sshd_config с правами
Переменная задаётся не тому пользователюsudo или система служб отбрасывают окружениеwhoami и env отличаютсяНастраивать среду на уровне конкретного процесса

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

  1. Шаг 1. Сравните окружение в двух режимах SSHПодключитесь как обычно, затем выполните однострочную команду с клиентского компьютера, подставив свой адрес. В примере нет паролей. Различие подтверждает, что проблема зависит от способа запуска оболочки.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    ssh user@server.example 'printf "shell=%s variable=%s\n" "$SHELL" "${LANG-НЕ_ЗАДАНА}"'
  1. Шаг 2. Установите оболочку и тип запускаНа сервере проверьте /etc/passwd через getent и системный режим оболочки. В Bash файлы ~/.bash_profile и ~/.bashrc обрабатываются по-разному, а команды ssh host cmd обычно выполняются в неинтерактивной среде.
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    getent passwd "$USER"
    printf "flags=%s\n" "$-"
    shopt login_shell || true
  1. Шаг 3. Проверьте, где назначается переменнаяСначала выясните, где определено требуемое значение. Не вставляйте секретные ключи в ~/.bashrc или /etc/profile. Для системной службы настройте переменную в unit или через подходящее хранилище учётных данных, а не в оболочке SSH.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    grep -nE "(^|[[:space:]])(export )?[A-Za-z_][A-Za-z0-9_]*=" ~/.bash_profile ~/.profile ~/.bashrc 2>/dev/null | head -35
  1. Шаг 4. Проверьте правила передачи среды по SSHНа клиенте ssh -G печатает эффективную конфигурацию SendEnv. На сервере администратор может прочитать AcceptEnv в конфигурации демона; сервер разрешает только конкретные имена, а произвольные значения с клиента небезопасны.
  2. Терминал Rocky Linux; нужны административные права
    Linux · Терминал (Bash)КомандаНужен sudo
    Терминал Rocky Linux; нужны административные права. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    ssh -G server.example | grep -iE "^sendenv|^setenv"
    sudo sshd -T | grep -i "^acceptenv"
  1. Шаг 5. Если нужна переменная лишь одной команде — задайте её адресноДля несекретного параметра при проверке передайте значение прямо в удалённую команду. Убедитесь, что оно не попадает в историю и журналы, если чувствительно. Пример запускает только env и печатает один проверочный ключ.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    ssh user@server.example "MY_TEST_FLAG=ok env | grep ^MY_TEST_FLAG="
  1. Шаг 6. Проверьте работу с sudo отдельноПри переключении пользователя sudo обычно очищает часть среды; это ожидаемое поведение. Для приложения не включайте глобально env_keep для всех переменных, особенно связанных с загрузкой библиотек.
  2. Терминал Rocky Linux; нужны административные права
    Linux · Терминал (Bash)КомандаНужен sudo
    Терминал Rocky Linux; нужны административные права. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    env | grep -E "^(PATH|LANG|HOME)="
    sudo env | grep -E "^(PATH|LANG|HOME)="
  1. Шаг 7. Проверьте после повторного входа и зафиксируйте способОткройте новое SSH-подключение, повторите именно первоначальную команду (интерактивную либо удалённую). Если значение требуется процессу systemd, проверяйте окружение самой службы; shell-переменная родителя туда автоматически не переносится.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    ssh user@server.example 'printf "LANG=%s\n" "${LANG-}"'

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

Переменная видна в нужном режиме SSH и в нужном процессе после нового входа; при этом не разрешена бесконтрольная пересылка переменных или секретов.

#Если предложенный способ не сработал

Если работает только интерактивная оболочка, пересмотрите расположение экспорта и способ запуска приложения; приложите к разбору ssh -G, режим оболочки и перечень имён переменных без значений секретов.

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

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

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