Назад | Перейти на главную страницу

SSH глобальный $ PATH

Когда я вхожу в свой ArchLinux сервер и введите:

$echo $PATH
I get...
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl

Но когда я НЕ вошел в систему и попробую:

ssh myyser@mysever 'echo $PATH'
i get..
/usr/bin:/bin:/usr/sbin:/sbin

ПУТЬ верен в моем / etc / profile, но ssh, похоже, не загружает его.

Есть ли способ исправить это для всех пользователей / сеансов ssh?

Этого не происходит, когда я использую ubuntu

Публикация здесь по предложению Евгений Маевский 'EldoS Corp

Я исправил эту проблему, добавив путь в / etc / окружающая среда

PATH=/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl

Не знаю, хорошая ли это практика, но работает.

Спасибо!

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

Если вы используете bash, это означает, что только ваш .bashrc файл используется. Я часто кладу что-то подобное в свой .bashrc файл:

if [ ! "$RAN_PROFILE" ]; then
  . $HOME/.profile
fi

И внизу моей .profile:

RAN_PROFILE=1
export RAN_PROFILE

Это гарантирует, что я получу .profile сервисы даже для оболочек без входа в систему.

Если вы используете Bash в качестве оболочки по умолчанию для пользователя, ваш ssh команда запускает неинтерактивную оболочку без входа в систему, поэтому она не обрабатывает /etc/profile. Вам нужно будет указать этот файл в своем сценарии.

Оболочка вашего клиента расширяет переменную PATH, поэтому вам нужно избегать знака доллара.

foo$ ssh username@bar.example.com 'echo \ $ PATH'