Как мне установить $PATH таким образом, что` ssh user@host command ' работает?


Я не могу установить новый $ путь таким образом, что он используется при выполнении команд через ssh user@host command. Я пробовал добавлять export PATH=$PATH:$HOME/new_path to ~/.и bashrc и ~/.профиль на удаленной машине, но выполнение ssh user@host "echo $PATH" показывает, что изменение не поднял (он показывает /usr/местные/sbin:/usr/местные/Бен: выполнить/sbin:/usr/Бен: файл/sbin:/bin: Белый каталог/usr/игры). Удаленном компьютере с Ubuntu 8.04.

Я уверен, что могу взломать его в/etc / profile, но это не чистое решение, и оно работает только тогда, когда один имеет корневой доступ.

6 114

6 ответов:

Как сказал Гравити,~/.bashrc - это то, что вы хотите, так как он получен неинтерактивными оболочками без входа в систему.

Я ожидаю, что проблема, с которой вы столкнулись, связана с Ubuntu по умолчанию ~/.файл bashrc. Это обычно начинается с чего-то вроде этого:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

вы хотите поставить что-нибудь для неинтерактивных оболочек до эта строка.

у вас есть ~/.bash_login или ~/.bash_profile?

Bash в интерактивном режиме проверяет наличие этих файлов и использует первый существующий в следующем порядке:

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile

так что если у вас есть ~/.bash_profile, то все изменения, которые вы делаете, чтобы ~/.profile останется незамеченным.

Bash в неинтерактивном режиме иногда считывает файл ~/.bashrc (который также часто является источником из интерактивных скриптов.) Под "иногда" я имею в виду, что это зависит от распределения: довольно странно, есть опция времени компиляции для включения этого. Debian включает ~/.bashrc чтение, в то время как, например, Arch не делает.

ssh кажется, использует неинтерактивный режим,так ~/.bashrc должно быть достаточно. Когда возникают такие проблемы, я обычно добавляю несколько echo, чтобы увидеть, какие файлы запускаются.

ssh документация говорит:

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

вот почему добавление в файлы bashrc не работает. однако у вас есть следующие варианты:

  1. Если PermitUserEnvironment опция установлена в конфигурации sshd, вы можете добавить свой путь настройки в ~/.ssh/environment

  2. ssh remotemachine 'bash -l -c "somecommand"'

вы всегда можете сказать:

ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH'

в дополнение к ответу @signpolyma вам нужно будет добавить свой экспорт перед этими строками

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

просто у меня была такая же проблема, решил ее с помощью:

ssh user@remotehost PATH=$HOME/bin:$PATH\; remote-command