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

Я не могу установить новый $PATH, чтобы он использовался при выполнении команд через ssh [email protected] command. Я попытался добавить export PATH=$PATH:$HOME/new_path в ~/.bashrc и ~/.profile на удаленном компьютере, но выполнение ssh [email protected] "echo \$PATH" показывает, что это изменение не было выбрано (оно показывает/usr/local/sbin:/usr/local/бен:/USR/SBIN:/USR/бен:/SBIN:/бен:/USR/игры). На удаленном компьютере работает Ubuntu 8.04.

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

Ответ 1

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

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

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

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

Ответ 2

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

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

  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile

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

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

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

Ответ 3

Документация ssh гласит:

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

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

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

  • ssh remotemachine 'bash -l -c "somecommand"'

Ответ 4

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

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

Ответ 5

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

ssh [email protected] PATH=\$HOME/bin:\$PATH\; remote-command

Ответ 6

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

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