web-dev-qa-db-ja.com

〜/ .bashrcはssh 'コマンド'から供給されていません

_.bashrc_の終わりに、私は追加しました:

_touch /tmp/bash_noninteractive_test
_

実行:

_/usr/bin/ssh -v -C [email protected] '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

1
LetMeSOThat4U

_man bash_のINVOCATIONの章から:

ログインシェルではない対話型シェルが開始されると、bashは_/etc/bash.bashrc_および_~/.bashrc_(これらのファイルが存在する場合)からコマンドを読み取って実行します。 _--norc_オプションを使用すると、これを禁止できます。 _--rcfile_ fileオプションは、bashに_/etc/bash.bashrc_および_~/.bashrc_の代わりにファイルからコマンドを読み取って実行するように強制します。

Bashが非対話的に開始されると、たとえば、シェルスクリプトを実行するために、環境で変数_BASH_ENV_を探し、そこに表示されている場合はその値を展開し、展開された値をファイルの名前として使用します読み取り、実行します。 bashは、次のコマンドが実行されたかのように動作します。

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

ただし、PATH変数の値は、ファイル名の検索には使用されません。

したがって、_~/.bashrc_がそれを指していない限り、_BASH_ENV_は非対話型シェルでソースされているneverのようです。

実際に達成したいことによっては、リモートホストの_/etc/ssh/sshd_config_でPermitUserRCPermitUserEnvironmentを有効にし、次に_~/.ssh/environment_および/または_~/.ssh/rc_の目的のコマンド。

注: SSH X11転送を_~/.ssh/rc_と一緒に使用する場合は、X11セッションを_xauth -q -_コマンドに明示的にフィードするためのコードスニペットを含める必要があります。 sshd(8)のmanページのSSHRCの章にある例を参照してください。

2
telcoM