最后.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
将我的位添加到旧线程以获取信息,因为接受的答案不是 .bashrc 没有被 ssh 命令读取的真正原因。阅读此答案后,我得到了提示。bash 手册页中 INVOCATION 部分的倒数第二段指出:
因此,尽管 ssh 命令以非交互式用户身份运行,但 .bashrc 仍会被加载。
但是您的操作系统可能会在 .bashrc 的顶部添加类似于以下内容(来自 Ubuntu 18.04)的检查,在非交互式调用的前几行之后退出 .bashrc。
为了防止检查,打开 .bashrc 并注释这些行,你的 ssh 命令将读取整个 .bashrc ,我想这就是你所期望的结果。
来自 INVOCATION 章节
man bash
:因此,除非指向它,否则它似乎
~/.bashrc
永远不会来源于非交互式外壳。BASH_ENV
根据您希望实际实现的目标,您可能会考虑在远程主机上启用
PermitUserRC
和/或PermitUserEnvironment
in/etc/ssh/sshd_config
,然后将所需的环境变量~/.ssh/environment
和/或所需的命令写入~/.ssh/rc
.注意:如果您计划将 SSH X11 转发与 一起使用
~/.ssh/rc
,则必须包含一段代码以将 X11 会话显式提供给xauth -q -
命令;sshd(8)
请参阅手册页SSHRC 章节中的示例。