Назад | Перейти на главную страницу

~ / .bashrc НЕ получен из ssh 'command'

В конце .bashrc Я добавил:

touch /tmp/bash_noninteractive_test

Бегать:

/usr/bin/ssh -v -C root@example.com 'ls'

На хосте (ранее входил в систему в интерактивном режиме):

% ls -l /tmp/bash_noninteractive_test
ls: cannot access /tmp/bash_noninteractive_test: No such file or directory

я думал ~./bashrc ВСЕГДА используется в неинтерактивных оболочках, например, по SSH? Как мне это исправить?

Затронутые системы:

% lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 Codename: trusty

% lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.11 (jessie) Release: 8.11 Codename: jessie

Из главы ПРИЗЫВ man bash:

Когда интерактивная оболочка, которая не является оболочкой входа, запускается, bash читает и выполняет команды из /etc/bash.bashrc и ~/.bashrc, если эти файлы существуют. Это можно предотвратить, используя --norc вариант. В --rcfile параметр файла заставит bash читать и выполнять команды из файла вместо /etc/bash.bashrc и ~/.bashrc.

Когда bash запускается в неинтерактивном режиме, например, чтобы запустить сценарий оболочки, он ищет переменную BASH_ENV в среде, расширяет свое значение, если оно там появляется, и использует расширенное значение как имя файла для чтения и выполнения. Bash ведет себя так, как если бы была выполнена следующая команда:

         if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

но значение переменной PATH не используется для поиска имени файла.

Получается, что ~/.bashrc является никогда получены из неинтерактивных оболочек, если только BASH_ENV указывает на это.

В зависимости от того, чего вы действительно хотите достичь, вы можете рассмотреть возможность включения PermitUserRC и / или PermitUserEnvironment в /etc/ssh/sshd_config на удаленном хосте, а затем записать нужные переменные среды в ~/.ssh/environment и / или желаемые команды в ~/.ssh/rc.

НОТА: если вы планируете использовать пересылку SSH X11 вместе с ~/.ssh/rc, вы должны включить фрагмент кода, чтобы явно передать сеанс X11 в xauth -q - команда; см. пример в главе SSHRC sshd(8) справочная страница.