SSH удаленная команда нет чтения всех переменных среды
я объявил некоторые переменные" PATH " в ".bashrc " файл удаленной машины. Когда я подключаюсь к удаленной машине, все эти переменные "PATH" работают нормально. Но когда я делаю "ssh user@remote env", "путь" объявлен в".bashrc " не читаются. Как я могу это исправить?
Это ".файл" в домашней директории на удаленной машине:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:
export PATH
Это ".bashrc " в домашнем каталоге на удаленной машине:
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# PATH
export PATH=$HOME/git-1.8/bin/:$PATH
и этого присутствует вывод команды "ssh user@remote env" с моего локального компьютера:
SHELL=/bin/bash
SSH_CLIENT=NNNNNNNNNNNNNNN
USER=XXXXXXXXX
MAIL=/var/mail/XXXXXXXX
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/openssh/bin
PWD=/volume2/home/hp120242/XXXXXXXXX
SHLVL=1
HOME=/home/hp120242/XXXXXXXXXX
LOGNAME=XXXXXXXXXXXXX
SSH_CONNECTION=NNNNNNNNNNNNNNNNNNN
LC_CTYPE=en_US.UTF-8
_=/bin/env
у меня нет прав суперпользователя на удаленной.
4 ответов
на мой ящик, фарш export HI=THERE
в пустом ~/.bashrc
показывает этот выход, когда SSH используется для контакта поле для ОКР листинг:
$ ssh $host /usr/bin/env 2>/dev/null | grep HI
HI=THERE
My ~/.bashrc
использует подход проверки для пользовательской переменной среды, а затем, если она отсутствует, делает эквивалент:
. ~/.profile # load in (Bourne-shell syntax) baseline environment variables
следовательно, мои команды ssh-хотя bash запускается так, как будто это субшелл (.только bashrc) - по-прежнему получать переменные среды, которые я обычно ожидаю не-интерактивной оболочки. Я, похоже, не помню, чтобы сделать это явно для SSH много лет назад.
вы могли бы иметь свой ~/.profile
установить некоторую переменную, скажем ENVGOOD=true
, тогда имейте это в своем ~/.bashrc
:
[ -z "$ENVGOOD" ] && . ~/.profile # sets ENVGOOD=true
или создать ~/.ssh/environment
. Обратите внимание, что это последнее будет работать только если PermitUserEnvironment = true
на /etc/ssh/sshd_config
установлено, что не по умолчанию (и, конечно, почему моя установка не полагается на него).
вот ответ: SSH не читает rc файлы
.bash_profile
не выполняется при выполнении команды, так как SSH не выполняет оболочку входа, она выполняет команду. Вы можете попробовать установить переменные окружения в ~/.ssh/environment
но возможно, что чтение этого файла было отключено.
вы можете попробовать принудительно оболочку входа через:ssh user@host bash -lc env
.
как отметили другие .bashrc
должно быть прочитано при запуске команда. Можете ли вы проверить, что это так, добавив что-то вроде echo EXECUTED
до top вашего .bashrc
.
также возможно, что все, что находится в /etc/bashrc
называет exit
так что ничего ниже, что не работает.
на CentOS / RHEL я сделал следующее
ssh user@host "source .bash_profile; env "
не забудьте\$, чтобы использовать переменные удаленной среды. Например, Следующая команда выведет то же значение
echo $SSH_CLIENT; ssh user@host "source .bash_profile; echo $SSH_CLIENT "
команда ниже
echo $SSH_CLIENT; ssh user@host "source .bash_profile; echo $SSH_CLIENT "
напечатает то, что вы ожидали.