Как мне установить $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 ответов:
Как сказал Гравити,~/.bashrc - это то, что вы хотите, так как он получен неинтерактивными оболочками без входа в систему.
Я ожидаю, что проблема, с которой вы столкнулись, связана с Ubuntu по умолчанию ~/.файл bashrc. Это обычно начинается с чего-то вроде этого:
# If not running interactively, don't do anything [ -z "$PS1" ] && return
вы хотите поставить что-нибудь для неинтерактивных оболочек до эта строка.
у вас есть
~/.bash_login
или~/.bash_profile
?Bash в интерактивном режиме проверяет наличие этих файлов и использует первый существующий в следующем порядке:
~/.bash_profile
~/.bash_login
~/.profile
так что если у вас есть
~/.bash_profile
, то все изменения, которые вы делаете, чтобы~/.profile
останется незамеченным.Bash в неинтерактивном режиме иногда считывает файл
~/.bashrc
(который также часто является источником из интерактивных скриптов.) Под "иногда" я имею в виду, что это зависит от распределения: довольно странно, есть опция времени компиляции для включения этого. Debian включает~/.bashrc
чтение, в то время как, например, Arch не делает.
ssh
кажется, использует неинтерактивный режим,так~/.bashrc
должно быть достаточно. Когда возникают такие проблемы, я обычно добавляю несколько echo, чтобы увидеть, какие файлы запускаются.
ssh документация говорит:
если команда указана, она выполняется на удаленном хосте вместо оболочки входа.
вот почему добавление в файлы bashrc не работает. однако у вас есть следующие варианты:
Если
PermitUserEnvironment
опция установлена в конфигурации sshd, вы можете добавить свой путь настройки в~/.ssh/environment
ssh remotemachine 'bash -l -c "somecommand"'