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

у меня нет прав суперпользователя на удаленной.

24
задан Alex North-Keys
07.12.2022 9:18 Количество просмотров материала 2585
Распечатать страницу

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 установлено, что не по умолчанию (и, конечно, почему моя установка не полагается на него).

1
отвечен Alex North-Keys 2022-12-08 17:06

вот ответ: SSH не читает rc файлы


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

вы можете попробовать принудительно оболочку входа через:ssh user@host bash -lc env.

как отметили другие .bashrc должно быть прочитано при запуске команда. Можете ли вы проверить, что это так, добавив что-то вроде echo EXECUTED до top вашего .bashrc.

также возможно, что все, что находится в /etc/bashrc называет exit так что ничего ниже, что не работает.

1
отвечен sshaw 2022-12-08 19:23

на удаленном компьютере убедитесь, что процесс sshd не имеет параметра, переопределяющего путь.

ps aux | grep sshd
0
отвечен Chase T. 2022-12-08 21:40

на 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 "

напечатает то, что вы ожидали.

0
отвечен Steve Deackoff 2022-12-08 23:57

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх