при работе по SSH не применяется переменная окружения — как найти причину и исправить

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

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

При подключении к Arch Linux по SSH не появляется ожидаемая переменная окружения (например, для программы или пользовательского пути). Клиентская и серверная стороны, интерактивная оболочка и однократная удалённая команда используют разные способы передачи окружения.

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

#Симптом и границы применимости

При подключении к Arch Linux по SSH не появляется ожидаемая переменная окружения (например, для программы или пользовательского пути). Клиентская и серверная стороны, интерактивная оболочка и однократная удалённая команда используют разные способы передачи окружения.

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

Возможная причинаКак узнатьЧто делать
Переменная задаётся только в интерактивной оболочкеФайл ~/.bashrc может не исполняться при удалённой команде.После обычного входа переменная есть, в ssh host env отсутствует.Установить значение там, где оно действительно требуется.
Политика SSH не разрешает передачуOpenSSH передаёт лишь разрешённые сервером переменные.SendEnv задан на клиенте, но AcceptEnv отсутствует на сервере.Изменить список только конкретных безопасных имён.
Значение нужно службе, а не SSHsystemd и запущенные им службы не наследуют окружение интерактивной оболочки.В SSH echo выводит значение, в systemctl show Environment его нет.Настроить Environment=/EnvironmentFile= нужной службы.

#Подробная диагностика и безопасные действия

  1. 1. Разделите сценарии SSHОткройте локальный терминал на своём ПК и выполните безопасный вывод имени пользователя и значения переменной на сервере. Замените USER@HOST и ПЕРЕМЕННАЯ на свои. Отсутствующее значение при однократной команде — не обязательно поломка OpenSSH.
  2. Диагностическая команда в терминале Arch Linux, без изменения настроек
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    ssh USER@HOST "id -un; printenv ПЕРЕМЕННАЯ"
  1. 2. Сравните интерактивный входЗайдите обычным ssh USER@HOST, затем на сервере посмотрите окружение и название оболочки. Разницу между двумя режимами фиксируйте без публикации секретов; никогда не присылайте токены/пароли из printenv.
  2. Диагностическая команда в терминале Arch Linux, без изменения настроек
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    ssh USER@HOST
    printf "%s\n" "$SHELL"
    printenv ПЕРЕМЕННАЯ
  1. 3. Определите, где задаётся переменнаяНа сервере проверьте личные файлы оболочки; Bash использует разные файлы для login и interactive. Если в переменной хранится секрет, не печатайте строку полностью. Если значения нет в файлах, оно может задаваться менеджером сеанса или приложения.
  2. Диагностическая команда в терминале Arch Linux, без изменения настроек
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    grep -n "ПЕРЕМЕННАЯ" ~/.bash_profile ~/.profile ~/.bashrc 2>/dev/null
    loginctl show-user "$USER" -p Linger
  1. 4. Проверьте разрешённую передачу в конфигурацииДля передачи с клиента необходимы SendEnv (клиент) и AcceptEnv (сервер), но разрешать * опасно. Прочитайте активную конфигурацию sshd на сервере; вывод none либо пустой список означает, что произвольное имя может быть отброшено.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)КомандаНужен sudo
    Вторую команду запускайте на сервере с административными правами; -T проверяет действующую конфигурацию.
    ssh -G HOST | grep -i "^sendenv"
    sudo sshd -T | grep -i "^acceptenv"
  1. 5. Выберите безопасный способ заданияДля одной команды передавайте значение явно через механизм программы, не полагаясь на SendEnv. Для длительной настройки интерактивной Bash-сессии добавьте экспорт только не секретной переменной в соответствующий профиль пользователя и заново войдите. Для служб используйте unit, а не ~/.bashrc.
  2. Диагностическая команда в терминале Arch Linux, без изменения настроек
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    printf "Проверка: %s\n" "${ПЕРЕМЕННАЯ:-не задана}"
    systemctl --user show-environment | grep "^ПЕРЕМЕННАЯ="
  1. Дополнительная команда по теме
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Только если конфигурация sshd действительно изменялась и проверка sshd -t прошла; есть риск потерять удалённый доступ.
    sudo sshd -t
    sudo systemctl reload sshd.service

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

  2. 6. Проверяйте изменения серверного SSH до перезагрузкиЕсли администратор вынужден изменить AcceptEnv для строго определённого имени, предварительно сохраните конфигурацию, выполните sshd -t и лишь затем reload на сервере, сохранив текущий сеанс открытым. Не меняйте настройки аутентификации ради одной переменной.
  1. 7. Проверьте обе формы подключенияОткройте второе SSH-подключение и выполните команду удалённо. Если оба режима работают, проблема устранена. Если значение доступно лишь в интерактивном сеансе, используйте профиль/login-shell или явный аргумент программы в зависимости от назначения.
  2. Диагностическая команда в терминале Arch Linux, без изменения настроек
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    ssh USER@HOST 'printenv ПЕРЕМЕННАЯ'
    ssh USER@HOST 'bash -lc "printenv ПЕРЕМЕННАЯ"'

#Как понять, что проблема устранена

Повторите исходное действие, из-за которого возникла неисправность, и сверяйте не только код завершения команды, но и прикладной результат. Сохраните вывод последней диагностической команды и записи журнала до и после исправления. Если ошибка повторяется, верните только изменённую настройку из резервной копии и передайте специалисту точный симптом, имя программы/службы, версию системы и необходимые фрагменты журнала без паролей и закрытых ключей.

#Что делать, если не помогло

Не применяйте случайные советы для другого дистрибутива: в Arch Linux особенно опасны частичные обновления пакетов, а в Rocky Linux — отключение SELinux или неконтролируемый перезапуск системных служб. Остановитесь после неуспешного безопасного шага, зафиксируйте фактическое сообщение и вернитесь к соответствующей причине. Для загрузки, разделов диска и единственного удалённого подключения используйте резервную копию и локальную консоль.

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

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

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